我有一个带有自定义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