新規投稿、投稿編集にメタボックスを追加する方法をサンプルを使って確認しました。
1)add_meta_box()
・記事投稿、ページ投稿、リンク編集画面にセクションを追加することができる。
○構文
add_meta_box( $id, $title, $callback, $page, $context, $priority )
$id:編集画面セクションのHTML ID。
$title:編集画面セクションのタイトル、画面上に表示される
$callback:編集画面セクションにHTML出力する関数
$page:編集画面セクションを表示する画面のタイプ (‘post’, ‘page’, ‘link’, custom_post_type。カスタムポストタイプはスラッグを指定)
$context:編集画面セクションが表示される部分 (‘normal’, ‘advanced’, ‘side’)
$priority:ボックスが表示される優先度 (‘high’ または ‘low’)
●設定例
add_action( 'add_meta_boxes', 'myplg_meta_box_init' ); function myplg_meta_box_init() { add_meta_box( 'myplg-meta', '商品情報', 'myplg_meta_box', 'post', 'side', 'default' ); }
※’add_meta_boxes’アクションフック
投稿編集画面が読み込まれた際に実行する
2)メタボックスの表示を行う関数を定義
上記1)の3番目の引数のコールバック関数
(設定例)
function myplg_meta_box( $post, $box ) { //カスタムメタボックスの値を取得 $myplg_price = get_post_meta( $post->ID, '_myplg_price', true ); wp_nonce_field( plugin_basename( __FILE__ ),'myplg_save_meta_box' ); echo '<p>価格: <input type="text" name="myplg_price" value="'.esc_attr( $myplg_price ).'" size="5" /></p>'; }
①get_post_meta()でメタボックスの既存の値を取得。
②wp_nonce_field()
・フォームにhiddenフィールドとして追加するためのnonceを取得または表示。
・nonceフィールドはフォームの内容が現在のサイトから来たものであり、他のサイトからではないということを認証するために使われる。
3)投稿保存時にメタボックスの値を保存
・’save_post’アクションを使って設定。
※’save_post’アクション
投稿が保存される際に実行されるフック。
(設定例)
add_action( 'save_post', 'myplg_save_meta_box' ); function myplg_save_meta_box( $post_id ) { if( isset( $_POST['myplg_price'] ) ) { //自動保存の場合はスキップ if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return; wp_verify_nonce( plugin_basename( __FILE__ ), 'myplg_save_meta_box' ); update_post_meta( $post_id, '_myplg_price', sanitize_text_field( $_POST['myplg_price'] ) ); } }
●update_post_meta
・指定した投稿に存在するカスタムフィールドの値を更新
○構文
update_post_meta($post_id, $meta_key, $meta_value, $prev_value)
$post_id:更新したいカスタムフィールドを持つ投稿の ID。
$meta_key:更新したいカスタムフィールドのキー。
$meta_value:カスタムフィールドの新しい値。
$prev_value:更新したいカスタムフィールドの元の値。これは、同じキーを持つカスタムフィールドを区別するパラメータ。省略すると、指定したキーを持つカスタムフィールドはすべて値が更新されます。
※見えないカスタムフィールド
“_”(アンダースコア)で始まるキーを持つカスタムフィールドは記事や固定ページの編集画面に表示されない。
●サンプルコード全体
add_action( 'add_meta_boxes', 'myplg_meta_box_init' ); function myplg_meta_box_init() { add_meta_box( 'myplg-meta', '商品情報', 'myplg_meta_box', 'post', 'side', 'default' ); } function myplg_meta_box( $post, $box ) { //カスタムメタボックスの値を取得 $myplg_price = get_post_meta( $post->ID, '_myplg_price', true ); wp_nonce_field( plugin_basename( __FILE__ ),'myplg_save_meta_box' ); echo '<p>価格: <input type="text" name="myplg_price" value="'.esc_attr( $myplg_price ).'" size="5" /></p>'; } add_action( 'save_post', 'myplg_save_meta_box' ); function myplg_save_meta_box( $post_id ) { if( isset( $_POST['myplg_price'] ) ) { //自動保存の場合はスキップ if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return; wp_verify_nonce( plugin_basename( __FILE__ ), 'myplg_save_meta_box' ); update_post_meta( $post_id, '_myplg_price', sanitize_text_field( $_POST['myplg_price'] ) ); } }関連記事の目次
- テーマ作成に関わるメモ
- WordPressコアの各ファイルの概要
- WordPressで使われるテーブル一覧
- WordPressのwpdbクラスを使ってテーブル操作
- WordPressの子テーマの概要、作り方
- ヘッダー、フッターにナビゲーションメニューを追加
- カテゴリーやアーカイブページなどに前後のページへのリンクを追加
- ブートストラップ3を使って自作テーマ作成
- (1)全体概要
- (2)ブートストラップのサンプルを使ってindex.phpを作成
- (3)header.php、sidebar.php、footer.php、index.phpのテンプレートファイル作成
- (4)JavaScriptインクルードの設定
- (5)投稿本文表示用のテンプレートファイルを作成
- (6)単一投稿用(single.php)のテンプレートファイル作成
- (7)固定ページ用(page.php)のテンプレートファイル作成
- (8)検索結果表示用(search.php)のテンプレートファイル作成
- (9)アーカイブ表示用(archive.php)のテンプレートファイル作成
- (10)カテゴリー表示用(category.php)のテンプレートファイル作成
- (11)WordPressのメニュー画面でナビゲーションメニューを設定
- (12)サイトタイトル、キャッチフレーズを表示できるようにheader.phpを修正
- (13)カスタムヘッダー画像を使えるようにheader.phpを修正
- (14)404.phpテンプレートファイルを作成
- (15)記事タイトル部分のCSS設定
- (16)記事メタデータ部分のCSS設定
- (17)記事本文部分のCSS設定
- (18)前後のページへのリンクのCSS設定
- (19)前後の投稿へのリンクのCSS設定
- (20)コメント投稿フォーム、コメント表示部のCSS設定
- (21)ウィジェット部のCSS設定
- (22)アーカイブページのCSS設定
- (23)画面を左右にスライドさせるボタンのCSS設定
- Bootstrapのフリーのテーマを使ってデザインを簡単にカスタマイズ
- ブートストラップ3を使って作成したナビゲーションメニューをAngularJSを使う形に変更する方法
- 投稿にメタボックスを追加する方法