[WordPress] カスタムフィールドをプラグインなしで追加したい
やりたいこと
- カスタムフィールドはWordPressの特長的な機能の一つです
- うまくコンテンツを切り出してカスタムフィールド化すれば、更新が楽になります。更新が楽になればその分コンテンツの作り込みができる好循環です
- カスタムフィールドの追加は、Advanced Custom FieldsやSmart Custom Fieldsなど、たくさんのプラグインがあります
- ですが、特殊な入力フィールドを用意したいときや、メンテナンス性を考慮したいときは極力プラグインを使いたくないものです
- 今回は、プラグインなしでカスタムフィールドを追加するためのサンプルコードを紹介します
サンプルコード(functions.php)
function add_my_meta_box() {
add_meta_box( 'mb_code', 'code', 'my_meta_box_callback', 'post', 'advanced' );
}
add_action( 'add_meta_boxes', 'add_my_meta_box' );
function my_meta_box_callback($post) {
wp_nonce_field( 'save_my_meta_box', 'mb_code_nonce' );
$value = get_post_meta( $post->ID, 'mb_code', true );
echo '<textarea name="text_mb_code" style="width: 100%; height: 300px">';
echo htmlspecialchars($value);
echo '</textarea>';
}
function save_my_meta_box($post_id) {
if( !isset( $_POST['mb_code_nonce'] ) ) {
return;
}
if( !wp_verify_nonce( $_POST['mb_code_nonce'], 'save_my_meta_box' ) ) {
return;
}
if( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) {
return;
}
if( !current_user_can( 'edit_post', $post_id ) ) {
return;
}
if( !isset( $_POST['text_mb_code'] ) ) {
return;
}
update_post_meta( $post_id, 'mb_code', $_POST['text_mb_code'] );
}
add_action( 'save_post', 'save_my_meta_box' );
仕組み、解説、補足など
- 「my_meta_box_callback」でechoしている要素が、カスタムフィールドそのものになります
- これを画像にしたり、ラジオボタンにしたり、チェックボックスにしたりすれば様々な入力フォームをカスタムフィールド化できます
ご質問など受け付けています
記事の中でわかりにくかったところ、もっと知りたかったこと、間違っていることなど、何でもお気軽にご連絡ください。
ご連絡は下記フォームを利用いただくか、ツイッターアカウント@flat8migi宛てでもOKです。