web-dev-qa-db-ja.com

特定のテンプレートが選択されているときにカスタムフィールドを追加する

私は現在のインフラストラクチャでそれがどのように新鮮ではなく前のサイトの上に構築されたかが原因でそれほど良くないサイトに変更を加えようとしています。

私はそれがそれ自身のカスタムフィールドを必要とするサイトのセクションを持っています。このセクションはそれ自身の投稿タイプを保証するものではありません、そしてサイトの状態のためにこのようにするのは非常に非現実的です。ユーザーのためには私が望んでいないのは、それがかなりずさんなのでカスタムフィールドを使用するようにしなければならないことです。

では、特定のテンプレートが選択されているときに、どのようにしてフィールドを追加することができますか(カスタム投稿タイプの場合のように)。

4
Leonard

できますか?絶対に! _wp_page_templateオブジェクトの$postメタキー値を照会し、それに応じて行動するだけです。おそらく何かのように:

// Globalize $post
global $post;
// Get the page template post meta
$page_template = get_post_meta( $post->ID, '_wp_page_template', true );
// If the current page uses our specific
// template, then output our post meta
if ( 'template-foobar.php' == $page_template ) {
    // Put your specific custom post meta stuff here
}

今は、カスタムフィールドではなく、 カスタム投稿メタボックス を使用することをお勧めします。

カスタム投稿メタボックスの完全な実装は、あなたの質問の範囲外ですが、基本的な答えは同じです。しかし、私はあなたを一般的な方向に向けようとします。 add_meta_boxes-{hook}にフックされたコールバック、メタボックスを定義するためのコールバック、および/ postitateを検証してカスタム投稿メタを保存するためのコールバックで呼び出される add_meta_box() の組み合わせを使用します。

function wpse70958_add_meta_boxes( $post ) {

    // Get the page template post meta
    $page_template = get_post_meta( $post->ID, '_wp_page_template', true );
    // If the current page uses our specific
    // template, then output our custom metabox
    if ( 'template-foobar.php' == $page_template ) {
        add_meta_box(
            'wpse70958-custom-metabox', // Metabox HTML ID attribute
            'Special Post Meta', // Metabox title
            'wpse70598_page_template_metabox', // callback name
            'page', // post type
            'side', // context (advanced, normal, or side)
            'default', // priority (high, core, default or low)
        );
    }
}
// Make sure to use "_" instead of "-"
add_action( 'add_meta_boxes_page', 'wpse70958_add_meta_boxes' );


function wpse70598_page_template_metabox() {
    // Define the meta box form fields here
}


function wpse70958_save_custom_post_meta() {
    // Sanitize/validate post meta here, before calling update_post_meta()
}
add_action( 'publish_page', 'wpse70958_save_custom_post_meta' );
add_action( 'draft_page', 'wpse70958_save_custom_post_meta' );
add_action( 'future_page', 'wpse70958_save_custom_post_meta' );

編集する

add_meta_box()呼び出し全体を条件式で囲むことをお勧めします。

13
Chip Bennett