2015-07-07 6 views
0

У меня есть родительская тема в WordPress, которая добавляет много функций и функций в WordPress, включая несколько обменов.Переопределить обмены с родительской темой в дочерней теме в WordPress

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

Вот родительская тема functions.php файла: http://pastebin.com/G1CVM6U2

Моя мысль была, что я просто нужно добавить код в моем детской теме, которая будет удалить действие из родительской темы, которая добавляет в метабоксы, и затем скопируйте файлы метабокса в мою дочернюю тему, измените их по мере необходимости, а затем используйте add_action, чтобы вытащить новую функцию, которая вызывает эти файлы метаболизма.

Тем не менее, у меня есть ад, даже способный удалить действие из родительской темы.

Я попробовал несколько вариантов следующих в моей детской теме functions.php:

remove_action('init', 'add_metaboxes'); 
remove_action('add_meta_box', 'add_metaboxes'); 

Он не удаляет метабоксы, хотя, как, когда я проверяю страница/пост редактора, они все еще видны.

Без запуска remove_action я не могу выполнить новое «add_action» для вызова в измененных файлах метабокса. Когда я пытаюсь сделать это, я получаю белый экран смерти из-за того, что, как я думаю, это одна и та же функция, которая была обновлена.

Я подозреваю, что поскольку действие в родительской теме вызывается как часть класса, процесс переустановки этого в дочерней теме может отличаться?

Поблагодарили бы за помощь в этом вопросе.

ответ

1

Пример 1: Удалить нормальный названный добавить действие

add_action('after_setup_theme', 'remove_meta_boxes'); 

function remove_meta_boxes(){ 
    remove_action('add_meta_box', 'add_metaboxes'), 10; 
} 

Пример 2: удалить функцию передается по ссылке

add_action выглядит следующим образом:

class ab{ 

    function __construct(){ 
     add_action('init', array(&$this, 'add_metaboxes')); 
    } 


} 

$x=new ab; 

Проблема здесь что wordpress добавит случайную строку идентификации к имени функции, например (a3898orj34930add_metaboxes), это случайный каждый раз, поэтому нам нужно использовать strpos, чтобы найти имя в ключе. Для этого я создал пользовательскую функцию.

function remove_anon_filters($name, $functionname, $priority){ 
    global $wp_filter; 

    foreach ($wp_filter[$name][$priority] as $key => $data) { 

     if(stripos($key, $functionname) ){ 
      remove_action($name, $key, $priority ); 
     } 

    } 

} 

Мы чем-то зацепимся за тему, настроенную для удаления родительской темы.

add_action('after_setup_theme', 'remove_parent_meta_boxes'); 

function remove_parent_meta_boxes(){ 
    remove_anon_filters ('init', 'add_metaboxes', 10); 
} 
+0

Это то, о чем я подумал, и его одна из многих вещей, которые я пробовал. Действие, используемое для добавления мета-боксов, по какой-то причине является «init». Я включил родительский файл functions.php темы в мой OP, так что вы можете увидеть его сами. Но все же, когда я добавляю свой код к дочерним функциям темы (и поверьте, я тоже делал попытку ранее), мета-поля не удаляются. Понятия не имею почему. –

+0

Сказать, что это сводит меня с ума, это преуменьшение.Я пытался сделать это в течение как минимум 2 часов :( –

+1

Остальные крючки добавляются по ссылке, поэтому я предполагаю, что добавление meta_boxes одинаково (на самом деле вы пропускаете действия в коде, который вы указали) , что входит во включенные файлы в функции add_meta_box? Если я угадываю, что там есть еще несколько дополнительных действий. – David

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