Как добавить add_meta_box к определенному шаблону страницы?

21 янв. 2013 г., 14:59:35
Просмотры: 32.9K
Голосов: 5

Я хочу добавить add_meta_box к определенному типу страницы, например к шаблону страницы (Page Template) или шаблону продукта (Product Template).

Я использую эту статью http://wp.smashingmagazine.com/2011/10/04/create-custom-post-meta-boxes-wordpress/ для попытки реализации.

0
Все ответы на вопрос 4
2
10

Если имя вашего пользовательского шаблона страницы - foobar.php, вы можете использовать get_post_meta():

global $post;
if ( 'foobar.php' == get_post_meta( $post->ID, '_wp_page_template', true ) ) {
    // Текущая страница использует шаблон foobar
    // выполнить какие-то действия
}

Лично мне нравится вызывать это внутри моего коллбэка 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' );

Вам просто нужно проинструктировать пользователей сохранить страницу после назначения шаблона, чтобы метабокс появился.

21 янв. 2013 г. 15:17:47
Комментарии

Большое спасибо, одна проблема - нужно уведомлять пользователя о необходимости сохранения страницы. Кстати, это сэкономило мне кучу времени. Спасибо, CHIP

Ajay Patel Ajay Patel
21 янв. 2013 г. 15:25:01

Спасибо за решение. Не мог вспомнить, не слишком ли рано срабатывает add_meta_boxes для этого. Возможно, стоит использовать if( 'foobar.php' == get_page_template_slug( $post->ID )) вместо прямого использования meta-key.

Jer Jer
25 июл. 2017 г. 19:45:36
0

Я обнаружил несколько ошибок в предложенном выше варианте с ответом, но настроил этот вариант ниже, и он помог — никаких ошибок.

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
                'Информация о продукте', // $title
                'display_product_information', // $callback
                'page', // $page
                'normal', // $context
                'high'); // $priority
        }
    }
}

function display_product_information()
{
    // Добавить HTML для метаданных записи
}

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

Чистый код

13 сент. 2016 г. 08:30:42
0

Это решение с названием страницы:

Accueil - это название страницы.

    $screens = ['Accueil'];
    foreach ($screens as $screen) {
     if ( get_the_title() == $screen ) {//условие
     add_meta_box(
      'accueil_données',
      'Информация об Оркестре',
      'metabox_accueil_infos',
      'page',
      'normal',
      'high'
     );
   }
}
     
18 апр. 2018 г. 23:46:26
2
-1
function mcf_add_custom_metabox() {
    global $post;
    if ( $_REQUEST['post'] == 30 ) {
        add_meta_box( 'shop_editor', ' ', 'mcf_callback', 'page' );
    }
}
add_action( 'add_meta_boxes_page', 'mcf_add_custom_metabox' );

Я нашел способ добавить метабокс на конкретную страницу, используя ID страницы.

15 дек. 2016 г. 08:17:52
Комментарии

Пожалуйста, [отредактируйте] ваш ответ и добавьте объяснение: почему это может решить проблему?

fuxia fuxia
15 дек. 2016 г. 09:26:30

Жёсткое кодирование — никогда не лучшая идея. ;)

dhuyvetter dhuyvetter
5 июн. 2017 г. 10:46:15