###実現したいこと
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
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/08/11 05:32
2019/08/11 05:40
2019/08/11 05:48 編集
2019/08/11 05:53
2019/08/11 06:00
2019/08/11 06:19
2019/08/11 06:25
2019/08/11 06:45