Удаление фильтра родительской темы в дочерней теме через functions.

Вопрос или проблема

Есть установка темы родитель/дочерний. В родительской теме есть фильтр, который я хочу удалить. Как мне удалить эти фильтры в функциях дочерней темы?

/** --------- */
/** COMMENTS */
/** --------- */

/** FORMAT COMMENT REPLY FIELD */
add_filter('comment_form_field_comment', function () {
\XPress::registry()->loadJS('themehouse/xpress/comment.js');
return '<div data-xf-init="xpress-comment-form">' . \XPress::getEditorInstance('comment_content', 'comment') . '</div>';
}, 8);

/** READ XF FROALA EDITOR CONTENT ON SAVE */
add_filter('preprocess_comment', function ($data) {
$data['comment_content'] = \XPress::getEditorContent('comment_content') ?: $data['comment_content'];

if (empty($data['comment_content']) || $data['comment_content'] === 'x') {
wp_die(\XPress::xlink()->phrase('xpress_empty_comment_error'), \XPress::xlink()->phrase('xpress_empty_comment'));
}

return $data;
}, 99, 1);

Например, используя код, как этот, в функциях нашей дочерней темы:

function remove_language_attributes() {
remove_filter('language_attributes', 'add_opengraph_doctype');
}
add_filter('init', 'remove_language_attributes');

В файле functions.php дочерней темы

<?php
remove_filter('comment_form_field_comment',99,1); ?>

Эти фильтры были добавлены с использованием анонимных функций, поэтому вы не можете просто remove_filter('filter_name', 'function_name'), потому что function_name фактически не существует.

Вы можете переопределить анонимную функцию, используя другую анонимную функцию и задав ей тот же приоритет. Например:

remove_filter( 'comment_form_field_comment', function(){}, 8 );

Больше информации можно найти здесь: Удаление акций/фильтров, добавленных с помощью анонимных функций

.

Ответ или решение

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

Анализируя ситуацию, представим более детализированное руководство по удалению этих фильтров:

  1. Понимание контекста: В данном случае родительская тема использует фильтры comment_form_field_comment и preprocess_comment, для выполнения некоторых функций в рамках работы с комментариями. Они включают регистрация JavaScript и обработку содержимого комментариев перед сохранением. Все это сделано с помощью анонимных функций с определенными приоритетами: 8 и 99 соответственно.

  2. Осознание проблемы: Анонимные функции часто вызывают сложности в их удалении, поскольку WordPress требует указания точно соответствующего обработчика (функции) и приоритета для работы remove_filter.

  3. Подход к решению:

    • Важно, чтобы дочерняя тема переопределяла анонимные функции, используя функции с аналогичным приоритетом.
    • Используйте аналогичный синтаксис для удаления фильтра, но примените пустую анонимную функцию, чтобы перекрыть функцию родительской темы.
  4. Реализация решения: В файле functions.php дочерней темы используйте следующий подход:

<?php
// Переопределение фильтров родительской темы
add_action('init', function() {
    // Переопределяем фильтр для комментариев
    add_filter('comment_form_field_comment', function () {
        return ''; // Возвращаем пустую строку, чтобы перезаписать логику родительской темы
    }, 8);

    // Обнуляем логику валидации комментариев
    add_filter('preprocess_comment', function ($data) {
        return $data; // Оставляем данные без изменений
    }, 99);
});
?>
  1. Внимание к деталям: Следите за тем, чтобы приоритеты были точно такими же, как в родительской теме. Это гарантирует, что ваши собственные фильтры будут применены своевременно, обеспечивая нужное поведение.

  2. Тестирование и оптимизация: После внесения изменений протестируйте работу вашего сайта, чтобы удостовериться, что новые фильтры правильно устраняют нежелательные эффекты и не приводят к непредвиденным последствиям.

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

Оцените материал
Добавить комментарий

Капча загружается...