Я пытаюсь получить входное значение шорткода внутри функции, которая используется фильтром, но, похоже, нет успеха. Вот что я сделал:
function my_shortcode_function($atts){
$value = $atts['id'];
function filter_value(){
echo $value;
}
add_filter('posts_where','filter_value');
}
add_shortcode('my-shortcode','my_shortcode_function');
Теперь я знаю, что использование $value
inside filter_value()
не будет работать из-за переменных областей, но даже использование $GLOBALS['value']
не работает.
Я даже пытался использовать $value = $atts['id']
внутри, filter_value();
но безуспешно.
Как я могу использовать свой шорткод [my-shortcode id='123']
и передать значение 123 в фильтр?
Спасибо.
$GLOBALS['value'] = some value
а затем вызываю,$GLOBALS['value']
оно работает, но если я устанавливаю значение напрямую как,$value = some value
а затем вызываю его с помощью,$GLOBALS['value']
оно не работает, в то время как оно должно работать в соответствии с руководством по PHP.$value
глобальную область видимости,global $value;
прежде чем инициализировать ее значением. Например,global $value; $value = $a['id'];
тогда в фильтре вы можете сделатьglobal $value; echo $value;
это помогает?$GLOBALS['value'];
?global
ключевое слово не требуется. В наших примерах мы работали изнутри функций, поэтомуglobal
ключевое слово необходимо.Вот несколько обходных путей:
Подход № 1
Вы можете обернуть определение шорткода и
posts_where
обратный вызов фильтра в класс, чтобы иметь возможность передавать определенное значение между методами класса, например, как частную переменную.Подход № 2
Другой подход заключается в передаче значения в качестве входного сигнала
WP_Query
в обратный вызов вашего шорткода:и затем в вашем фильтре posts_where вы можете получить к нему доступ:
Подход № 3
... или вы также можете настроить пример с помощью @the_dramatist, чтобы впоследствии иметь возможность удалить обратный вызов, назначив анонимную функцию переменной:
Посмотрите, например, документы PHP о том, как назначить анонимную функцию с ключевым словом use переменной.
ps: я думаю, что впервые узнал об этой уловке назначения переменных @gmazzap, чтобы упростить удаление обратного вызова анонимного фильтра.
Надеюсь, поможет!
источник
WP_Query
нацеливания на данный экземпляр и доступа к нему через различные фильтры, такие какposts_where
,pre_get_posts
иposts_clauses
. Это то, что мы делаем в подходе № 2.Вы можете использовать
use
ключевое слово PHP . Таким образом, с помощью этогоuse
ключевого слова вы можете внести переменную в функцию. А также вы можете написать анонимную функцию для сокращения кода. Так что все это будетНадеюсь, это поможет.
источник
Почему бы не передать значение $ в качестве параметра?
документация
источник