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

Я пытаюсь переопределить плагин, который создает SEO-заголовки в WordPress. Фильтр выполняет свою работу, но мне нужно динамически создавать заголовки. Поэтому я создаю заголовок, а затем передаю его анонимной функции. Я мог бы иметь другую функцию, которая создает заголовки, и это определенно будет чище...

Это работает

function seo_function(){

 add_filter('wpseo_title', function(){
        return 'test seo title';
    });

}

Это не

function seo_function(){

//create title above
$title="test seo title";


    add_filter('wpseo_title', function($title){
        return $title;
    });

}

Спасибо за любую помощь

Джо

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

функция seo_function () {

//create title above
$title="test seo title";


    add_filter('wpseo_title', 'seo_title');

}

function seo_title(){

$title="test";

return $title;

}

person jhodgson4    schedule 28.07.2013    source источник
comment
Как насчет, например, вызова функции, которая генерирует заголовок внутри функции фильтра?   -  person ndm    schedule 28.07.2013
comment
@ndm добавил пример для вас   -  person jhodgson4    schedule 28.07.2013


Ответы (2)


Вы передаете переменные в область закрытия с помощью ключевого слова use:

$new_title = "test seo title";

add_filter( 'wpseo_title', function( $arg ) use ( $new_title ) {
    return $new_title;
});

Аргумент в function($arg) будет отправлен вызовом apply_filters(), например другим плагином, а не вашим кодом.

См. также: Передача параметра функциям фильтрации и действия

person fuxia    schedule 28.07.2013
comment
А, понятно, а когда бы вы использовали function( $argument ){} ? - person jhodgson4; 28.07.2013
comment
Аргумент в function($arg) будет отправлен вызовом apply_filters(), например другим плагином, а не вашим кодом. - person fuxia; 28.07.2013

Параметры, которые вы можете указать для пользовательских фильтров, определяются фильтром и тем, как фильтры работают в Wordpress. См. документацию по фильтрам в Wordpress на http://codex.wordpress.org/Plugin_API/Filter_Reference.

Кроме того, вы не первый, кто пытается это сделать, поэтому, возможно, это поможет вам (поскольку у меня нет установленного Wordpress, чтобы протестировать его): http://wordpress.org/support/topic/change-the-title-dynamicly

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

person Remko    schedule 28.07.2013