Как добавить add_meta_box к определенному шаблону страницы?
Я хочу добавить add_meta_box к определенному типу страницы, например к шаблону страницы (Page Template) или шаблону продукта (Product Template).
Я использую эту статью http://wp.smashingmagazine.com/2011/10/04/create-custom-post-meta-boxes-wordpress/ для попытки реализации.

Если имя вашего пользовательского шаблона страницы - 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' );
Вам просто нужно проинструктировать пользователей сохранить страницу после назначения шаблона, чтобы метабокс появился.

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

Я обнаружил несколько ошибок в предложенном выше варианте с ответом, но настроил этот вариант ниже, и он помог — никаких ошибок.
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
Чистый код

Это решение с названием страницы:
Accueil - это название страницы.
$screens = ['Accueil'];
foreach ($screens as $screen) {
if ( get_the_title() == $screen ) {//условие
add_meta_box(
'accueil_données',
'Информация об Оркестре',
'metabox_accueil_infos',
'page',
'normal',
'high'
);
}
}

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 страницы.
