自定义帖子类型上的URL重写

时间:2017-12-13 作者:Amenadiel17

是否可以在自定义帖子类型的所有帖子上重写此类操作url?

Original url:

example.com/custompostype/post-title/?action=play-123
(期望输出)Rewriting to:

example.com/custompostype/post-title/play-123
123=postid

有没有可能用wordpress的函数而不是direct来完成呢。htaccess编辑?

3 个回复
SO网友:Amenadiel17

我刚刚意识到我使用了不同类型的重写,不需要@Jacob的代码(使用add\\u rewrite\\u endpoint)

add_action(\'init\', \'wpse42279_add_endpoints\');
function wpse42279_add_endpoints()
{
    add_rewrite_endpoint(\'play\', EP_PERMALINK);
}
然后我在单页上使用了这个条件:

global $post;
$pid = $post->ID;
$var = get_query_var( \'play\' ); 
if( !empty($var) and $var == $pid) :
// do stuff
endif;

Now here\'s the working pretty link:

example.com/custompostype/post-title/play/123/
Instead of:实例com/custompostype/post-title/?播放=123

然而,现在的问题是,旧url仍然存在(example.com/custompostype/post title/?play=123),并且仍然可以访问/可见。是否可以使其工作方式与此代码的工作方式类似:

example.com/?custompostype=321
(它重定向到pretty链接:example.com/custompostype/post title/)

SO网友:brianjohnhanna

我很确定你是否需要使用action 参数您将得到一些混合的结果,因为这是WordPress在很多情况下使用的一个参数。如果您对参数的名称有灵活性,这确实是可能的。我目前无法测试这一点,但这应该会让你朝着正确的方向前进。

function wpse_cpt_rewrite_rule() {
    add_rewrite_rule(\'^customposttype/([^/]*)/([^/]*)/?\',\'index.php?pagename=$matches[1]&action=$matches[2]\',\'top\');
}
add_action(\'init\', \'wpse_cpt_rewrite_rule\', 10, 0);
需要注意的是,如果您不使用action 参数,您还需要像so一样注册自定义参数。

function wpse_add_custom_tag() {
    add_rewrite_tag(\'%my_custom_action%\', \'([^&]+)\');
}
add_action(\'init\', \'wpse_add_custom_tag\', 10, 0);

SO网友:Sid

假设页面(新URL)已正常运行,请使用以下选项:

$current_url="//".$_SERVER[\'HTTP_HOST\'].$_SERVER[\'REQUEST_URI\'];

if(strpos($current_url, \'?action=\')) {
    $action = $_GET[\'action\'];
    wp_redirect( \'example.com/custompostype/post-title/\' . $action, $status = 301 );
    exit;
}

结束

相关推荐