質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

Q&A

解決済

1回答

2672閲覧

カスタムテーブルへのデータ保存

tuckQ

総合スコア64

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

0グッド

0クリップ

投稿2016/10/15 12:23

###前提・実現したいこと
WordPressのコメント機能をカスタマイズして独自テーブル「wp_review_meta」にデータ保存したい

具体的には、
0. コメントの基本情報は「wp_comments」テーブルに保存しつつ、追加情報を「wp_review_meta」に保存
0. 上記2つのテーブルの情報をcomment_IDで紐付けて表示

のようなイメージ。

###試したこと
プラグインを作成。
プラグイン有効時に独自のデータベースを作成するところまではうまくできた。

テーブル構成は下記です。
※「comment_id」は後でwp_commentsテーブルの「comment_ID」に関連づけるために用意
※主キーは「review_id 」でauto incrementを指定している
+------+--------------------------------+-----+-----+
| review_id | comment_id | data1 | data2 |
+------+--------------------------------+-----+-----+
|1|1|てすとでーた|テストデータ|
+------+--------------------------------+-----+-----+

コメント投稿時にアクションフックでオリジナル関数を呼び出し、データベースに新規追加or更新するコードを記述。(下記参照)

###該当のソースコード

php

1add_action( 'comment_post', 'save_review_data' ); 2function save_review_data( $comment_id ) { 3 global $wpdb; 4 5 //「data1」「data2」は、コメント投稿欄のカスタムフィールドから取得と仮定 6 $temp_data1 = isset($_POST['data1']) ? $_POST['data1'] : null; 7 $temp_data2 = isset($_POST['data2']) ? $_POST['data2'] : null; 8 9 $get_id = $wpdb->get_var( 10 $wpdb->prepare( "SELECT comment_id FROM 11 wp_review_meta WHERE 12 comment_id = %d", $comment_id) 13 ); 14 15 //保存するために配列にする 16 $set_arr = array( 17 'review_id' => '', 18 'data1' => $temp_data1, 19 'data2' => $temp_data2, 20 ); 21 22 //レコードがなかったら新規追加あったら更新 23 if ($get_id) { 24 $wpdb->update( $table_name, $set_arr, array('comment_id' => $comment_id)); 25 } else { 26 $set_arr['comment_id'] = $comment_id; 27 $wpdb->insert( $table_name, $set_arr); 28 } 29 $wpdb->show_errors(); 30

###発生している問題・エラーメッセージ
「wp_comments」へのデータ保存は通るのに、「wp_review_meta」にデータが保存されない。

###補足情報(言語/FW/ツール等のバージョンなど)
ちなみに、以下のサイトを参考にしながら開発にチャレンジしています。
WordPressでオリジナルのデータベース(テーブル)を作成する [プラグイン開発中級編]

よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

独自にテーブルを作らなくても、comment_meta という仕組みがありますよ。

【add_comment_meta:WordPress私的マニュアル】
http://elearn.jp/wpman/function/add_comment_meta.html

【add_comment_meta() | Function | WordPress Developer Resources】
https://developer.wordpress.org/reference/functions/add_comment_meta/


コードについては、フィルタアクションで実行する前に save_review_data をそのまま実行しても通るようにデバッグを繰り返すといいと思います。とりあえず、レコードの追加、更新、$_POST値の受け取り、アクションの受け取りくらいの順番だと思います。

投稿2016/10/15 14:09

kei344

総合スコア69407

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tuckQ

2016/10/16 13:36

ご回答ありがとうございます。「comment_meta」で保存する方法は事前に試してみて、成功したんですが、保存されるデータに一覧性を持たせたいと思いまして、カスタムテーブルを活用する方法を検討しております。 デバッグ方法についてですが、なるほどフィルタアクションを使わずに、直接、関数を実行する方法だとやりやすそうですね。実践してみます!
kei344

2016/10/16 14:12

「一覧性」がどういうものを指すのかがいまいちわかりませんが、wp_commentmeta もそう複雑ではないので「一覧」するのは難しくないような。 【データベース構造 - WordPress Codex 日本語版】 https://wpdocs.osdn.jp/%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E6%A7%8B%E9%80%A0#.E3.83.86.E3.83.BC.E3.83.96.E3.83.AB.EF.BC.9A_wp_commentmeta とりあえず(もう設定されているかもしれませんが)開発中はデバッグモードにしておいたほうがはかどりますので、お勧めです。 【WordPress初心者におすすめ!デバッグモードの使い方 | Mignon Style】 http://mignonstyle.com/debug-mode/
tuckQ

2016/10/23 04:50

回答が遅れてしまい失礼しました。「一覧性」というと語弊がありました、、分かりづらくてすみません。 うまく文章で表現するのが難しいのですが、私の中では以下のようなイメージを持っております。 追加するカスタムフィールドが5個あるとして、 ■commentmetaの場合 ・1回のコメントでmeta_idが5個追加される ・テーブル表示した際の「可読性」が悪い(1コメントのデータが5行) *「可読性」も良い表現ではないかもしれませんが。。。 ■カスタムテーブルの場合(上記5つのフィールドを格納するフィールドを持つ) ・1コメントに関するデータを1レコード(行)にまとめられる ・テーブル表示した際の「可読性」が良い 上記踏まえ、カスタムテーブルで作っておいた方が、のちのちデータ参照するSQL文を書く際や、データ管理の面でも楽になるのではないか?という個人的な推測による希望となります。 追加で教えていただいたデバッグモードは既に入れておりまして、この機能のおかげで、カスタムテーブルへデータ追加を行うところまで上手くできました。(ご紹介ありがとうございます) カスタムテーブルの作り込みも進めておりまして、 現在は、wp_commnetに保存されるcommentIDと同じ値を、カスタムテーブル「wp_review_meta」のcomment_idに保存する方法のところでつまづいております。 この部分については、質問内容を更新して改めて質問させていただこうと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問