删除wordpress网站的部分网址

时间:2015-12-22 10:29:46

标签: wordpress .htaccess mod-rewrite url-rewriting

当我使用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

来制定规则

2 个答案:

答案 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%/