web-dev-qa-db-ja.com

特定のページテンプレートにadd_meta_boxを追加する方法

add_meta_box を特定の page ページテンプレートのように、商品テンプレートのように追加したい。

私はそれを試すためにこの記事を使っています http://wp.smashingmagazine.com/2011/10/04/create-custom-post-meta-boxes-wordpress/ .

4
Ajay Patel

カスタムページテンプレートのファイル名がfoobar.phpの場合は、get_post_meta()を使用できます。

global $post;
if ( 'foobar.php' == get_post_meta( $post->ID, '_wp_page_template', true ) ) {
    // The current page has the foobar template assigned
    // do something
}

個人的には、これをadd_meta_boxes_pageコールバック内で呼び出し、それをadd_meta_box()呼び出し自体でラップするのが好きです。

function wpse82477_add_meta_boxes_page() {
    global $post;
    if ( 'foobar.php' == get_post_meta( $post->ID, '_wp_page_template', true ) ) {
        add_meta_box( $args );
    }
}
add_action( 'add_meta_boxes_page', 'wpse82477_add_meta_boxes_page' );

メタボックスが表示されるように、テンプレートを割り当てた後に ページを保存する にユーザーに指示するだけで済みます。

6
Chip Bennett

私は上記の選択肢の上の答えでいくつかのバグを見つけましたが、私は下記のこのオプションをカスタマイズしました、そしてそれは助けました - 全くバグなし。

add_action('add_meta_boxes', 'add_product_meta');
function add_product_meta()
{
    global $post;

    if(!empty($post))
    {
        $pageTemplate = get_post_meta($post->ID, '_wp_page_template', true);

        if($pageTemplate == 'page-templates/product-page.php' )
        {
            add_meta_box(
                'product_meta', // $id
                'Product Information', // $title
                'display_product_information', // $callback
                'page', // $page
                'normal', // $context
                'high'); // $priority
        }
    }
}

function display_product_information()
{
    // Add the HTML for the post meta
}

https://paulund.co.uk/display-post-meta-box-specific-page-templates

きれいです

2
omukiguy

これはページの名前の解決策です:

Accueilはページの名前です。

    $screens = ['Accueil'];
    foreach ($screens as $screen) {
     if ( get_the_title() == $screen2 ) {
     add_meta_box(
      'accueil_données',
      'Informations sur Orchestre',
      'metabox_accueil_infos',
      'page',
      'normal',
      'high'
     );
   }
}
0
Julie Chaumard