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

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

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

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

836閲覧

WordPressでタームのカスタムフィールドを複数追加したい

twentytwenty

総合スコア6

WordPress

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2019/08/10 19:09

編集2019/08/11 05:31

###実現したいこと
WordPressのタームのカスタムフィールドについて、その情報の編集機能を実装したいと考えております。
どなたかupdate_term_meta()周辺機能についてお詳しい方からのご回答をいただけましたら幸いです。

発生している問題

➀「編集画面の追加」 → できた
➁「現在の値の表示」 → できた
➂「新しい値に編集」 → できない
という状況です。

つまり管理画面の「カテゴリーの編集」という画面で、新しい値を入力しても、「更新」をクリックしたら更新されずそのままになってしまいます。

該当のソースコード

「term_color」と「term_shape」という2つのカスタムフィールドを追加したいと思い次のコードを作ってみたのですが、前述のように「➂新しい値に編集」ができない状況です。

????funcitons.php

php

1// キーと値 2function get_termcf_ary(){ 3 $termcf_ary = [ 4 'term_color' => 'いろ', 5 'term_shape' => 'かたち' 6 ]; 7 return $termcf_ary; 8} 9 10// 編集画面の追加 11function animal_taxonomy_custom_fields($tag) { 12 $t_id = $tag->term_id; 13 $termcf_ary = get_termcf_ary(); 14 foreach( $termcf_ary as $key=>$k ) { 15 $get_value = esc_html( get_term_meta( $t_id, $key, true ) ); 16 echo '<tr class="form-field">'; 17 echo ' <th scope="row">'; 18 echo ' <label for="' . $key . '">' . $k . '</label> '; 19 echo ' </th>'; 20 echo ' <td>'; 21 echo ' <input type="text" id="' . $key . '" name="' . $key . '" value="' . $get_value . '">'; 22 echo ' </td>'; 23 echo '</tr>'; 24 } 25} 26add_action( 'animal_edit_form_fields', 'animal_taxonomy_custom_fields', 10, 2 ); 27 28// 入力値の保存 29function save_taxonomy_custom_fields( $term_id ) { 30 31 // 管理人のみ 32 if(!current_user_can('administrator')) { return; } 33 34 // 保存(たぶんここがオカシイ) 35 $termcf_ary = get_termcf_ary(); 36 foreach( $termcf_ary as $key ) { 37 if( isset( $_POST['term_meta'][$key] ) && $_POST['term_meta'][$key] ) { 38 update_term_meta( $term_id, $key, $_POST['term_meta'][$key] ); 39 }else{ 40 update_term_meta( $term_id, $key, '' ); 41 } 42 } 43} 44add_action( 'edited_animal', 'save_taxonomy_custom_fields', 10, 2 );

試したこと

とりあえず管理画面以外からはどうかと思い、適当にsingle.phpなどに下記を書くと「➂新しい値に編集」ができます。

????single.php

php

1$term_id = 140; 2$meta_value = 'この値は保存される'; 3update_term_meta( $term_id, 'term_shape', $meta_value );

つまり先ほどの、該当のソースコードの// 保存(たぶんここがオカシイ)に問題があるかと思います。

###試したこと(追記)
kei344様のご回答を受けて次の値が確認されたので、該当のソースコードの$_POST['term_meta'][$key]$_POST[$key]に変更しましたが、やはり保存されませんでした。

最後の['term_color']"この値は保存される"は、上のsingle.phpから保存できた値です。

そして['term_shape']"1"が管理画面からの入力になりまして、これが保存されません。

array(12) { ["action"]=> string(9) "editedtag" ["tag_ID"]=> string(3) "140" ["taxonomy"]=> string(5) "animal" ["_wp_original_http_referer"]=> string(91) "http://examplep.com/wp-admin/edit-tags.php?taxonomy=animal&post_type=book" ["_wpnonce"]=> string(10) "842a933054" ["_wp_http_referer"]=> string(143) "/wp-admin/term.php?taxonomy=animal&tag_ID=140&post_type=book&wp_http_referer=%2Fwp-admin%2Fedit-tags.php%3Ftaxonomy%3Danimal%26post_type%3Dbook" ["name"]=> string(4) "test" ["slug"]=> string(4) "test" ["parent"]=> string(2) "-1" ["description"]=> string(11) "description" ["term_color"]=> string(27) "この値は保存される" ["term_shape"]=> string(1) "1" }

引き続きヒントや確認方法などご指導いただけましたら幸いです。

補足情報(FW/ツールのバージョンなど)

WordPress 5.2.2
PHP 7.2.13

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

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

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

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

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

guest

回答1

0

ベストアンサー

PHP

1// 保存(たぶんここがオカシイ) 2var_dump( $_POST );exit(); // これを挿入して中身を確認してみては?

投稿2019/08/11 02:46

kei344

総合スコア69407

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

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

twentytwenty

2019/08/11 05:32

ありがとうございます。exit()という確認方法を知りませんでした。これから活かしたいと思います。 さて確認できた値を参考にしまして、該当のソースコードに次の変更を加えました。 $_POST['term_meta'][$key] ↓変更 $_POST[$key] しかしやはり保存されませんでした。そのあたりの詳細につきまして、試したことを追記させて頂きました。もし他にも確認すべき方法などご存じでしたら是非コメントよろしくお願い致します。
kei344

2019/08/11 05:40

HTMLの仕様でform内の同一nameは最後の要素しか送信されません。配列で送るとかしましょう。 【$_GET, $_POSTなどを受け取る際の処理 - Qiita】 https://qiita.com/mpyw/items/2f9955db1c02eeef43ea 【PHP - POSTによる配列の受け渡し | php Tutorial】 https://riptutorial.com/ja/php/example/27569/post%E3%81%AB%E3%82%88%E3%82%8B%E9%85%8D%E5%88%97%E3%81%AE%E5%8F%97%E3%81%91%E6%B8%A1%E3%81%97 【PHPで配列をPOSTする - yutadayo's blog】 https://yuta.hatenablog.com/entry/20090608/1244457215
twentytwenty

2019/08/11 05:48 編集

>同一name とはどこのことですか? foreach した $key が name になっているので、その name は同一ではないと思ってしまうのですが、別の話でしょうか? >配列で送る $_POST[$key] というのは、$key を配列で送っていると思うのですが、これも違った認識でしょうか? 何度も申し訳ございません。
kei344

2019/08/11 05:53

すみません、「複数追加したい」が同じフィールドに複数の値を入れたいのかと思いました。もう一度読みます。
kei344

2019/08/11 06:00

update_term_meta( $term_id, $key, $_POST['term_meta'][$key] ); を update_term_meta( $term_id, $key, 'テスト:'.$key ); に置き換えて更新されるか確認し、更新されていたなら$_POSTの指定の問題、更新されていなければその前の条件分岐の問題。
twentytwenty

2019/08/11 06:19

なるほど。しかし$_POSTの指定や条件分岐の以前に、 foreach( $cf_arr as $key ) { update_term_meta( $term_id, $key, 'テスト' ); } とやっても「テスト」さえ保存されない状況でした。厄介ですf(´-`;)
kei344

2019/08/11 06:25

$term_id $key が思った通りに来ているかの確認をしてみてください。
twentytwenty

2019/08/11 06:45

$key=>$kを忘れていました。最悪すぎます。一日なにしてたんでしょうか……… 付き合わせてしまって申し訳ございませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問