2015-09-10 4 views
0

Что я пытаюсь сделать здесь, это удалить некоторые настраиваемые поля, которые я создал при выборе шаблона, например, когда я выбираю определенный шаблон, который я хочу скрыть или показать определенные обмены.удалить пользовательские мета-поля, не работающие

Код, который у меня есть, следующий, но он вообще не работает (то есть, чтобы он не удалял каких-либо обменов), и я хотел бы помочь узнать, что с ним не так, или если я пытаюсь сделать это просто невозможно.

add_action('admin_init','my_meta_init'); 
    function my_meta_init(){ 
    $template_file = get_post_meta(get_the_ID(), '_wp_page_template', TRUE); 

if (($template_file == 'thanks-template.php') || ($template_file == 'view-template.php')) 
{ 
    remove_meta_box('my_meta_box_id','page','normal'); 
    remove_meta_box('my_meta_box_id_2','page','side'); 
    remove_meta_box('my_meta_box_id_3','page','side'); 
    remove_meta_box('dynamic_sectionid','page','normal');  
} else 
{ 
    remove_meta_box('my_meta_box_id_4','page','normal'); 
} 
    } 
+0

Когда вы добавляете коробки? – David

+0

Я не знаю точно, почему вы сохраняете page-templae в _wp_page_template, но, возможно, вам нравится [is_page_template()] (https://codex.wordpress.org/Function_Reference/is_page_template). –

+0

@David Я добавил их перед этой функцией, и эта часть работает правильно, они сохраняют и отображают данные так, как должны. –

ответ

6

Спасибо Вам за комментарии и ответы, все помогали. Проблема заключалась в том, что я использовал этот крючок, я его сменил, и теперь он отлично работает:

add_action('admin_head','my_meta_init'); 
+0

Спасибо, что это сработало и для меня, я не смог удалить некоторые мета-боксы! ;-) – Riccardo

1

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

То есть вам нужно подключить admin_menu вместо admin_init, поскольку обменные знаки могут не существовать в тот момент, когда вы пытаетесь их удалить. Таким образом, необходим определенный порядок, чтобы убедиться, что вызов удаления метабокса выполняется, когда генерируются и существуют фактические обмены.

я тестировал следующий код на моем локальном хосте, и спрятали Автор Div/METABOX штраф при использовании этого фрагмента кода:

function remove_page_fields() { 
    remove_meta_box('authordiv' , 'page' , 'normal'); //removes author 
} 
add_action('admin_menu' , 'remove_page_fields'); 

Другой подход:

Кстати, как я думаю о ситуация, с которой вы сталкиваетесь, возможно, добавляет метабокс/настраиваемые поля таким образом, что они отображаются только на страницах, на которые мы предназначены. Я работал над проектами, где мне нужно показать некоторые обменные ситуации только при выборе определенного шаблона.

Я использую класс CMB2 для создания метабоксов в основном, если вы будете использовать то или что-то подобное, вы можете использовать этот параметр, чтобы указать шаблоны страниц https://github.com/WebDevStudios/CMB2/wiki/Display-Options#limit-to-specific-page-templates

Смежные вопросы