WordPress で批評サイトを作る案件で記事ごとに批評元の URL を管理する必要があったので、カスタムフィールドを追加してみた。
WordPress の投稿記事はタイトルと本文の2つの編集項目しかないのが、カスタムフィールドという機能を使うと、投稿記事ごとに独自の編集項目を追加することができる。
例
カスタムフィールドを作成するには、以下の3つの関数を作成する。
- カスタム―フィールドを宣言する関数
- カスタムフィールドの入力フォームを表示する関数
- カスタムフィールドに入力された値を保存する関数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| <?php
function additional_data_inner_custom_box() { echo '<p>この記事ページの補足情報を入力してください</p>';
$additional_data = ""; if (isset($_GET['post'])) { $additional_data_array = get_post_meta( $_GET['post'], 'additional_data'); if (isset($additional_data_array[0])) { $additional_data = $additional_data_array[0]; } } $res = "<input name=\"additional_data\" value=\"{$additional_data}\" />"; echo $res; }
add_action('init', function() { add_action('admin_menu', function() { add_meta_box( 'additional_data', 'この記事ページの補足情報', 'additional_data_inner_custom_box', 'post', 'normal', 'high'); });
add_action('save_post', function( $post_id ) { $data = filter_input(INPUT_POST, 'additional_data', FILTER_SANITIZE_FULL_SPECIAL_CHARS);
if ( $data ) { if ( "" == get_post_meta( $post_id, 'additional_data')) { add_post_meta( $post_id, 'additional_data', $data, true); } else { update_post_meta( $post_id, 'additional_data', $data); } } }); });
|
カスタムフィールドで入力された値は、wp_postmeta テーブルに post_id と meta_key, meta_value の組み合わせで保存される。
保存された値は post_id と meta_key で以下のように呼び出すことができる。
1 2 3 4 5 6 7
| add_shortcode( 'get_additional_data', function(array $attr) { $default = [ 'post_id' => '', ]; $attr = shortcode_atts( $default, $attr); return get_post_meta(intval($attr['post_id']), 'additional_data', true); });
|
うまく動けば、記事内でショートコード [get_additional_data] でカスタムフィールドに入力した値は表示される。