WordPress

新しくカスタムフィールド枠を追加してみる(セレクトボックス)。:【26日目】WordPress1日1プラグイン

更新日:

ようこそのお運びで、厚く御礼申し上げます。
26日目です。前回に引き続きカスタムフィールドです。今回からしばらくはphpの復習になると思います。基本的なことは25日目の記事とおなじですので読み飛ばしてもかまいません。

新しくカスタムフィールド枠を追加設定してみる(セレクトボックス)。

セレクトボックス入力のカスタムフィールド枠を、標準のものとは別に追加してみます。
今回も記事ページ本文の頭に追加するようにしています。

標準のカスタムフィールドはこんな感じなので、
140211-0001

これを、以下のような入力項目にしてみたいと思います。
140212-0001

表示はとりあえずこんな感じで行きます。
140212-0002

まずは、function.phpに書いてみます。

では、function.phpに以下のコードを書きました。

//表示用(今回は本文の先頭に表示するようにしています)
add_filter('the_content','paka3_custom');
//投稿ページへ表示するカスタムボックスを定義する
add_action('admin_menu', 'add_custom_inputbox');
//入力したデータの更新処理
add_action('save_post', 'save_custom_postdata');
//#################################
//表示用
//#################################
function paka3_custom($contentData){
     if(is_single()){
	$id = get_the_ID();
	$custom = get_post_meta($id, "paka3select", true);
	return "<h4 style=color:red>今日の気分は".$custom."</h4>".$contentData;
     }
}

//#################################
//投稿ページ用
//#################################
//投稿ページに表示される"入力欄その1"の設定
function add_custom_inputbox() {
    add_meta_box( 'paka3id','入力欄その1', 'paka3_custom_field', 'post', 'normal' );
}

//投稿ページに表示されるカスタムフィールド
function paka3_custom_field(){
       $id = get_the_ID();
       //カスタムフィールドの値を取得
       $paka3select = get_post_meta($id,'paka3select',true);
        $data = array(
	         array("選択してください","",""),
		 array("よいよい","よいよい",""),
		 array("まあまあ","まあまあ",""),
		 array("ふつう","ふつう",""),
		 array("ちょいわる","ちょいわる",""),
		 array("わるい","わるい","")
		 );

       echo <<<EOS
       今日の気分:
       <select name="paka3select">
EOS;
        foreach($data as $d){
		if($d[1]==$paka3select) $d[2] ="selected";
		echo <<<EOS
		<option value="{$d[1]}" {$d[2]}>{$d[0]}
EOS;
	}
       echo <<<EOS
       </select>
EOS;
}
//#################################
//更新処理
//#################################
/*投稿ボタンを押した際のデータ更新と保存*/
function save_custom_postdata($post_id){
	//入力した値(postされた値)
	$paka3select=isset($_POST['paka3select']) ? $_POST['paka3select']: null;
	//DBに登録してあるデータ
	$paka3text_ex = get_post_meta($post_id, 'paka3select', true);
	if($paka3select){
	  update_post_meta($post_id, 'paka3select',$paka3select);
	}else{
	  delete_post_meta($post_id, 'paka3select',$paka3select);
	}
}

////////////////////////////

ポイントはどこ?

大きく分けて3つの処理「カスタムフィールドの値を表示」と「カスタムフィールド枠の追加」「更新処理」にわけています。「カスタムフィールドの値を表示」はテンプレートでも処理が可能です。

今回はセレクトボックスで書いています。

  • カスタムフィールドの値を表示します
    the_contentをフィルターフックしています。

    //表示用(今回は本文の先頭に表示するようにしています)
    add_filter('the_content','paka3_custom');
    

    変数名:paka3selectの値を取得して、表示の処理を行います。

    //#################################
    //表示用
    //#################################
    function paka3_custom($contentData){
         if(is_single()){
    	$id = get_the_ID();
    	$custom = get_post_meta($id, "paka3select", true);
    	return "<h4 style=color:red>今日の気分は".$custom."</h4>".$contentData;
         }
    }
    
  • 管理画面の投稿ページにカスタムフィールドの枠を追加します。
    //投稿ページへ表示するカスタムボックスを定義する
    //WordPressに「新しいページを作ったよー」ってお知らせする命令。
    add_action('admin_menu', 'add_custom_inputbox');
    
  • 投稿ページにadd_meta_boxを使ってカスタムセクションを追加します。
    add_meta_box:WordPress Codex参照

    //#################################
    //投稿ページ用
    //#################################
    //投稿ページに表示される"入力欄その1"の設定
    function add_custom_inputbox() {
        add_meta_box( 'paka3id','入力欄その1', 'paka3_custom_field', 'post', 'normal' );
        /*
        $id : paka3id
        $title : 入力欄1
        $callback(関数) : paka3_custom_field
        $page(画面タイプ:post/page/link): post
        $context(表示部分:normal/advanced/side) : normal
        */
    }
    
  • 表示される内容(カスタムフィールド)を設定する。
    保存されている値はget_post_metaで取得をします。
    get_post_meta:WordPress Codex 参照

    //投稿ページに表示されるカスタムフィールド
    function paka3_custom_field(){
           $id = get_the_ID();
           //カスタムフィールドの値を取得
           $paka3select = get_post_meta($id,'paka3select',true);
           //セレクトボックスの値を配列に挿入
           //例:array('表示','value','selected')
            $data = array(
    	         array("選択してください","",""),
    		 array("よいよい","よいよい",""),
    		 array("まあまあ","まあまあ",""),
    		 array("ふつう","ふつう",""),
    		 array("ちょいわる","ちょいわる",""),
    		 array("わるい","わるい","")
    		 );
    
           echo <<<EOS
           今日の気分:
           <select name="paka3select">
    EOS;
            //セレクトボックスの作成:配列をforeachでまわす
            foreach($data as $d){
    		if($d[1]==$paka3select) $d[2] ="selected";
    		echo <<<EOS
    		<option value="{$d[1]}" {$d[2]}>{$d[0]}
    EOS;
    	}
           echo <<<EOS
           </select>
    EOS;
    }
    
  • データを更新した場合の処理を行います。
    save_post(投稿・ページが作成・更新された際に実行)をアクションフック

    //入力したデータの更新処理
    add_action('save_post', 'save_custom_postdata');
    
  • ページが保存される際に「入力された値」と、「保存してある値」を取得します。
    「入力された値」があれば、update_post_metaで更新処理を行います。
    「入力された値」がなければ、delete_post_metaで削除処理を行います(※処理の仕方によってはいらないかも)。

    //#################################
    //更新処理
    //#################################
    /*投稿ボタンを押した際のデータ更新と保存*/
    function save_custom_postdata($post_id){
    	//入力した値(postされた値)
    	$paka3select=isset($_POST['paka3select']) ? $_POST['paka3select']: null;
    	//DBに保存してあるデータ
    	$paka3select_ex = get_post_meta($post_id, 'paka3select', true);
    	if($paka3text){
    	  update_post_meta($post_id, 'paka3select',$paka3select);
    	}else{
    	  delete_post_meta($post_id, 'paka3select',$paka3select_ex);
    	}
    }
    

コードをプラグイン用のファイルにします

それではfunction.phpに書いたコードを消して、
paka3_new_custom_field.php」というファイルを作成し、以下のコードを記入します。

このファイルを[wp-content]>「plugins」ディレクトリに入れ、管理画面で有効にして完了です。

今回のまとめ

今回はセレクトボックスのカスタムフィールドを扱ってみました。といってもテキスト入力のときと同様のやり方だったので、セレクトボックスの作成の部分を変更しただけです。もちろんいろんなコードの書き方があるとは思いますが、一例としてこんな書き方をしてみました。

-WordPress
-, , ,

Copyright© アルパカ@ラボ , 2024 All Rights Reserved Powered by AFFINGER5.