Как отфильтровать подключаемую функцию из дочерней темы WordPress

Мне нужно добавить фильтр к конкретной функции wordpress, которая определена в файле, который включается в подключаемые функции темы functions f

functions.php:

if (!function_exists('nectar_colors_css_output')) {
    function nectar_colors_css_output(){
        include('css/colors.php');
    }
}

colors.php:

<?php 
function nectar_colors() {
    // not relevant what happens here, but I have 
    // to call another function before this one is called!
}
?>

Я использую дочернюю тему, и когда я пытаюсь отфильтровать эту функцию из файла functions.php дочерней темы, ничего не происходит. Это связано с тем, что подключаемые функции родительской темы будут вызываться после вызова фильтров из дочерней темы.

Моя функция фильтрации в файле functions.php дочерней темы:

function filter_function() {
  // some custom actions...
}
add_filter('nectar_colors', 'filter_function');

Как я могу заставить этот фильтр работать?


person jannnik    schedule 13.01.2015    source источник


Ответы (1)


Что именно вы пытаетесь отфильтровать? Возможно, вы неправильно понимаете концепции.

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

#themename-child

function nectar_colors_css_output(){
    error_log("It worked!");
}
person George Nemes    schedule 14.01.2015
comment
Это было бы решением, но оно немного сложнее: подключаемая функция родительской темы включает еще один скрипт php, который содержит функцию, которую мне нужно фильтровать. Мне нужно решение, которое вызывает функцию родительской темы до того, как будет использован фильтр моего ребенка. Я мог бы удалить if (!function_exists('nectar_colors_css_output')) {, но я не хочу изменять файлы родительской темы! - person jannnik; 14.01.2015
comment
Простите за ошибку, поменял вопрос :) - person jannnik; 14.01.2015
comment
Извините за это, но я все еще не могу понять, что вы пытаетесь сделать. Я так понял, вы не можете изменить код родительской темы? В этом случае вы можете использовать только те крючки, которые они предоставили. Ищите do_action() или apply_filter(). - person George Nemes; 14.01.2015
comment
Да, я не хочу изменять код родительской темы. Проблема в том, что ловушка не работает для функций, которые включены (определены) после определения фильтра. - person jannnik; 15.01.2015
comment
Не могли бы вы предоставить фактический код, в котором это происходит? Это бы очень помогло. - person George Nemes; 15.01.2015
comment
Я немного изменил вопрос, теперь он содержит собственно код. Я удалил тела методов, потому что они содержат более 200 строк;) Попробуйте восстановить мою проблему с реальным кодом, и вы увидите, что фильтр не работает. - person jannnik; 30.01.2015