隐藏或不允许默认自定义帖子类型URL?

时间:2017-02-20 作者:Stephen

我有一些自定义的帖子类型,我想完全隐藏或禁止它们的默认URL。例如,我有一个名为organization的自定义帖子类型,未重写的url如下所示:

http://example.com/?organization=my-org-name
我有一个相当复杂的工作重写结构,它是分类标记和自定义帖子类型的组合,所以人们可以使用URL,如

http://example.com/AL/organization/my-org-name
http://example.com/CA/organization/my-org-name
等等,以到达有问题的岗位。所有这些都很好。我只是不想在转到默认URL时显示任何内容。当我注意到生成XML站点地图时,我开始担心这一点。我希望它消失,在我的重写结构之外再也找不到它。

更新时间:

我想我只是通过添加以下内容来解决这个问题:

  ,\'publicly_queryable\' => false
我的注册后类型代码。这至少阻止了这些页面的加载,但它并没有解决XML站点地图中显示的可怕URL。

更新2:

我开始怀疑我是否不需要将这些默认url重写为其他内容,但这意味着检查url,进行查找,然后。。。只返回第一个可能的分类标记??

1 个回复
最合适的回答,由SO网友:Stephen 整理而成

好吧,我终于明白了。最后,我不得不妥协,以防同一物品有多个位置标签,但我对它的工作方式感到高兴。

首先,我必须改变permalink结构(感谢Milo),如下所示:

function get_real_link_please( $url, $post ) {
    if ( $post->post_type == \'organization\' ){
    $loc_list = wp_get_post_terms($post->ID, \'my_locations\');
    $location = $loc_list[0]->slug; //get first item in case there is more than one
    return home_url( $location . \'/organization/\' . $post->post_name, $url );
    }
    return $url;
}
add_filter( \'post_type_link\', \'get_real_link_please\', 10, 2 );
然后,我必须确保我的重写规则考虑到了这一点:

add_action( \'init\', \'cpt_rewrite_link\' );

function cpt_rewrite_link(){
       add_rewrite_rule( \'([^/]+)/([^/]*)/([^/]*)/\', \'index.php?my_locations=$matches[1]&post_type=$matches[2]&name=$matches[3]\', \'top\' );

}
最后(非常重要!),我必须确保我的cpt事实上是可以公开查询的:

  ,\'publicly_queryable\' => true
唯一能让我更开心的是,如果我能找到一种方法,为多个位置创建多个永久链接,但由于其他链接也可以,所以第一个位置可以是“官方”位置。希望这对其他人有帮助,这是一只熊。

相关推荐