VPSサーバーでWebサイト公開 備忘録 ~Linux、MySQLからAJAXまで

WordPress投稿にメタボックスを追加する方法

新規投稿、投稿編集にメタボックスを追加する方法をサンプルを使って確認しました。

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'] ) );
  }
}
モバイルバージョンを終了