前提・実現したいこと
Wordpressでカスタムフィールドの設定をしたいです。
発生している問題・エラーメッセージ
functions.phpに下記記載したところ、項目は表示されたものの、その値が表示されず、登録もできなくなってしまいました。
更新をクリックしても入っていない状態です。
該当のソースコード
2つのカスタム投稿タイプ(dogとtransport)に、それぞれ別のカスタムフィールドがあり、下記のようにして設定しています。
いずれも扱う配列($dog_metaと$transport_metat)が違うだけで同じコードの並びなので冗長ですが、記載させて頂きます。
????カスタム投稿タイプ「dog」についてのカスタムフィールドの設定
PHP
1// dog で扱うカスタムフィールド 2$dog_meta=[ 3 'dog 種類'=>'dog_type', 4 'dog 名前'=>'dog_name', 5]; 6// 以下は $dog_meta 以外は transport と同じコード 7add_action( 'admin_menu',function()use($dog_meta){ 8 foreach($dog_meta as $label=>$key){ 9 $keyname='post_meta_'.$key; 10 add_meta_box( $keyname, $label, function($post)use($label,$keyname){ 11 $get_value = get_post_meta( $post->ID, $keyname, true ); 12 wp_nonce_field( 'action-' . $keyname, 'nonce-' . $keyname ); 13 echo '<input name="' . $keyname . '" value="' . $get_value . '">'; 14 }, 'dog', 'normal' ); 15 } 16}); 17add_action( 'save_post',function()use($dog_meta){ 18 foreach($dog_meta as $label=>$key){ 19 if ( isset( $_POST['nonce-' . $key] ) && $_POST['nonce-' . $key] ) { 20 if( check_admin_referer( 'action-' . $key, 'nonce-' . $key ) ) { 21 if( isset( $_POST[$key] ) && $_POST[$key] ) { 22 update_post_meta( $post_id, $key, $_POST[$key] ); 23 }else{ 24 delete_post_meta( $post_id, $key, get_post_meta( $post_id, $key, true ) ); 25 } 26 } 27 } 28 } 29});
????カスタム投稿タイプ「transport」についてのカスタムフィールドの設定
PHP
1// transport で扱うカスタムフィールド 2$transport_meta=[ 3 'transport 時刻'=>'transport_time', 4 'transport 曜日'=>'transport_day', 5]; 6// 以下は $transport_meta 以外は dog と同じコード 7add_action( 'admin_menu',function()use($transport_meta){ 8 foreach($transport_meta as $label=>$key){ 9 $keyname='post_meta_'.$key; 10 add_meta_box( $keyname, $label, function($post)use($label,$keyname){ 11 $get_value = get_post_meta( $post->ID, $keyname, true ); 12 wp_nonce_field( 'action-' . $keyname, 'nonce-' . $keyname ); 13 echo '<input name="' . $keyname . '" value="' . $get_value . '">'; 14 }, 'transport', 'normal' ); 15 } 16}); 17add_action( 'save_post',function()use($transport_meta){ 18 foreach($transport_meta as $label=>$key){ 19 if ( isset( $_POST['nonce-' . $key] ) && $_POST['nonce-' . $key] ) { 20 if( check_admin_referer( 'action-' . $key, 'nonce-' . $key ) ) { 21 if( isset( $_POST[$key] ) && $_POST[$key] ) { 22 update_post_meta( $post_id, $key, $_POST[$key] ); 23 }else{ 24 delete_post_meta( $post_id, $key, get_post_meta( $post_id, $key, true ) ); 25 } 26 } 27 } 28 } 29});
試したこと
こちらのご質問を参考にしてみましたが(https://teratail.com/questions/180797)、dogだけだったり、admin_menuのフックだけだったりしてもできませんでした。
(質問はdogだけや片方のフックにするよりも最終的なゴールを意図しましたので、多少冗長ではありますが、transportやsave_postもつかわせて頂きました。)
また、実際にはかなり多くのカスタムフィールドがあるため、1つ1つではなく上のようにまとめて設定できればと思っています。(1つ1つなら自力でも問題なく設定できます。)
補足情報(FW/ツールのバージョンなど)
Wordpressで、テーマはtwentynineteenを使っています。その他の点は特に問題なく動作しています。
よろしくお願い致します。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/05/15 03:20