###実現したいこと
functions.phpでカスタムフィールドを保存しているのですが、そのコードを簡略化したいです。
下記のコードで
function create_lang() {}
function create_sex() {}
function create_age() {}
という3つを
function create_all() {}
のように一括したい感じです。
###現在の状況
現在のコードはこの「言語」に対応する形で
add_meta_box( 'post_meta_lang', '言語', 'create_post_meta_lang', 'mypost', 'side' );
このfunctionがあり、フィールドが追加されるようになっています。
function create_lang() {}
しかしこのように「性別」や「年齢」などたくさんあったときに
add_meta_box( 'post_meta_sex', '性別', 'create_post_meta_sex', 'mypost', 'side' );
add_meta_box( 'post_meta_age', '年齢', 'create_post_meta_age', 'mypost', 'side' );
このようにいちいち同じようなfunctionを書きたくないと思いました。
function create_sex() {}
function create_age() {}
これらのfunction create_xxx() {}
で違うのは$keyname = 'post_meta_xxx';
の部分だけだからです。
そこで教えていただきたいのは、「言語」「性別」「年齢」などのすべてに対応できるfunctionです。
たとえばこのように1つにまとめるにはどうしたらよろしいでしょうか。
function create_all() {}
###現在のソースコード
現在のソースコードはこちらです。
php
1/* 2投稿編集画面でカスタムフィールドを表示する 3=======================================*/ 4add_action( 'admin_menu', 'add_meta_field' ); 5function add_meta_field() { 6 add_meta_box( 'post_meta_lang', '言語', 'create_post_meta_lang', 'mypost', 'side' ); 7 add_meta_box( 'post_meta_sex', '性別', 'create_post_meta_sex', 'mypost', 'side' ); 8 add_meta_box( 'post_meta_age', '年齢', 'create_post_meta_age', 'mypost', 'side' ); 9} 10 11/* これらをまとめたfunctionはどのようなコードになるか? */ 12function create_lang() { 13 $keyname = 'post_meta_lang'; 14 global $post; 15 $get_value = get_post_meta( $post->ID, $keyname, true ); 16 wp_nonce_field( 'action-' . $keyname, 'nonce-' . $keyname ); 17 echo '<input name="' . $keyname . '" value="' . $get_value . '">'; 18} 19function create_sex() { 20 $keyname = 'post_meta_sex'; 21 // create_langと同じだからまとめたい 22} 23function create_age() { 24 $keyname = 'post_meta_age'; 25 // create_langと同じだからまとめたい 26} 27 28/* 29投稿編集画面でカスタムフィールドを保存する 30=======================================*/ 31add_action( 'save_post', 'save_meta_field' ); 32function save_meta_field( $post_id ) { 33 $custom_fields = ['post_meta_lang','post_meta_sex','post_meta_age']; 34 foreach( $custom_fields as $d ) { 35 if ( isset( $_POST['nonce-' . $d] ) && $_POST['nonce-' . $d] ) { 36 if( check_admin_referer( 'action-' . $d, 'nonce-' . $d ) ) { 37 if( isset( $_POST[$d] ) && $_POST[$d] ) { 38 update_post_meta( $post_id, $d, $_POST[$d] ); 39 } else { 40 delete_post_meta( $post_id, $d, get_post_meta( $post_id, $d, true ) ); 41 } 42 } 43 } 44 45 } 46}
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/03/23 14:25
2019/03/23 14:38
2019/03/23 14:41
2019/03/23 14:59 編集
2019/03/23 15:20
2019/03/23 15:27