我正在创建一个插件,在其中检查页面url中传递的参数,然后使用这些参数的值来更改标题、元标记和其他一些SEO更改。但我在尝试将操作和过滤器正确地结合起来以实现这一点时遇到了问题。下面是我正在做的一些事情的示例。首先,我注册在url中传递的变量
add_action(\'init\', \'register_tag\');
function register_tag() {
add_rewrite_tag(\'%address%\',\'([^&]+)\');
}
然后,我从$wp\\u查询中获取变量,并设置标题和其他内容。
add_filter(\'wp_head\', \'seo_features\');
function seo_features() {
global $wp_query,$post,$address;
$address = $wp_query->query_vars[\'address\'];
if ($address) {
$post->post_title = $address;
add_filter(\'wp_title\', set_title);
add_filter(\'wpseo_title\', set_title);
remove_action(\'wp_head\', \'rel_canonical\');
}
}
function set_title($title) {
global $address;
return $address;
}
但我认为你做不到
add_action()
或
add_filter()
来自
add_filter()
?
我不知道如何正确地执行此操作。我必须使用add_action("init")
注册标记(并使用添加相关重写规则add_rewrite_rule()
). 但我似乎只能得到变量的值$address
从…起$wp_query
从add_filter
呼叫尝试在没有筛选器/操作的情况下访问它是行不通的,因为调用它太早了。
你知道我应该按什么顺序做吗?
SO网友:s_ha_dum
如果你掌握了正确的时机,你可以从其他钩子中添加或删除钩子,但我不明白你为什么把这个弄得如此复杂。
function set_title($title) {
global $wp_query,$post,$address;
$address = $wp_query->query_vars[\'address\'];
if ($address) {
return $address;
}
}
add_filter(\'wp_title\', \'set_title\');
如果需要共享值,请使用
static
变量:
function my_address() {
static $address = \'\';
global $wp_query;
if (empty($address)) {
$address = $wp_query->query_vars[\'address\'];
}
return $address;
}
function set_title($title) {
return my_address();
}
add_filter(\'wp_title\', \'set_title\');
或者把整件事都放在一节课上。