当我使用CPT(自定义帖子类型)时,我很想在htaccess上放置服务器规则来删除wordpress通过永久链接生成的URL的某些部分。 事实是,我不确定这可以通过简单的重写规则来实现。
我的网址实际上是这样的:
http://www.13mdn.com/white-stripes
我想改为:
http://www.13mdn.com/oldreleases_post/the-who
和
http://www.13mdn.com/the-who
我想改为:
RewriteRule ^newreleases_post/(.*)$ $1
RewriteRule ^oldreleases_post/(.*)$ $1
这是我在htacces文件中制定的规则
{
"fields" : ["user.lastname"],
"query" : {
"term" : { "_id" : 1 }
}
}
这不起作用。
我也尝试通过wordpress函数like this
来制定规则答案 0 :(得分:3)
要从帖子网址中删除自定义帖子类型slug,您需要在 functions.php 中添加以下内容:
function remove_cpt_slug($post_link, $post, $leavename) {
if($post->post_type == 'newreleases_post' || $post->post_type == 'oldreleases_post') {
$post_link = str_replace('/'.$post->post_type.'/', '/', $post_link);
}
return $post_link;
}
add_filter('post_type_link', 'remove_cpt_slug', 10, 3);
这将更改CPT的所有网址以删除CPT名称。要让Wordpress知道他应该检查那些CPT,请添加以下功能:
function request_cpt($query) {
if(! $query->is_main_query()) {
return;
}
if(count($query->query) != 2 || ! isset( $query->query['page'])) {
return;
}
if (! empty( $query->query['name'])) {
$query->set('post_type', array('post', 'newreleases_post', 'oldreleases_post'));
}
}
add_action('pre_get_posts', 'request_cpt');
最后一步,要将旧网址重定向到新网址,请将其添加到htaccess的顶部(在Wordpress部分之前):
RewriteEngine On
RewriteRule ^newreleases_post/(.*)$ $1 [L,R=301]
RewriteRule ^oldreleases_post/(.*)$ $1 [L,R=301]
请注意,如果您对CPT和网页使用相同的永久链接,则可能会导致冲突。
答案 1 :(得分:0)
只需将固定链接更改为自定义格式:/%postname%/