我有一个带有自定义posttype“speaker”的插件,可以通过普通的permalink访问该插件domain.tld/speaker/speaker-name.
在里面addidtion 我想使用另一个url访问相同的说话人姓名:
domain.tld/slp/speaker-name
因此,我使用rewrite\\u规则来屏蔽原始url:
add_rewrite_rule(\'slp\\/(.*)\', \'index.php?slp=$matches[1]\', \'top\');
我知道我可以简单地将其重写为原始的permalink,但重要的是用户不能看到原始的permalink。
下一步,我将“slp”添加到queryvars中:
add_filter(\'query_vars\', \'queryvars\' );
function queryvars( $qvars ){
$qvars[] = \'slp\';
return $qvars;
}
使用add\\u操作(“parse\\u request”…)我试图获得控制权,只需将一个带有正确帖子的查询返回到Wordpress,希望它能正常工作:
add_action("parse_request", \'action_handler\');
function action_handler($wp) {
if (isset($wp->query_vars["slp"])) {
global $wp;
$speaker_name = $wp->query_vars["slp"];
... some magic to get the $speaker_id as their is additional logic needed ...
return query_posts(\'p=\'.$speaker_id.\'&post_type=speaker\');
}
}
起初看起来一切都很顺利。。我可以用这两个URL打开演讲者帖子,但在细节上,我似乎“混淆”了wordpress的流程:(
对于exmaple:如果使用重写url打开此函数,则此函数不起作用。它在$帖子中保留了第一篇博客帖子(“Hello World”),而不是发言人帖子:(
function add_meta() {
global $post;
if (get_post_type($post) != "speaker") return;
echo \'<meta name="robots" content="noindex, nofollow">\';
}
add_action(\'wp_head\', \'add_meta\');
我怎样才能将说话人的帖子正确地放入正常的Wordpress循环中?这样其他插件(如Yoast)就可以正常工作了?
Milo提供的解决方案:
add_action("parse_request", \'action_handler\');
function action_handler($wp) {
if (isset($wp->query_vars["speaker"])) {
$speaker_name = $wp->query_vars["speaker"];
... some magic to get the $post_name as their is additional logic needed ...
$wp->query_vars["speaker"] = $post_name;
}
}
谢谢你
Milo