使用自定义帖子类型和分类法更好地进行URL格式化

时间:2016-04-19 21:55:35

标签: wordpress .htaccess wordpress-plugin custom-post-type

我正在使用工具集类型,并想知道设置网址是多么容易。

我有一个自定义的帖子类型的场地,我有一个自定义类别的位置分类。

目前,网址就像

一样
http://domain.com/venue/location/manchester/
http://domain.com/venue/manchester/the-venue-name/

但我希望网址的结构类似于

http://domain.com/manchester/
http://domain.com/manchester/the-venue-name/

我需要在哪里进行这些更改?

这都是.htaccess工作还是可以在永久链接部分完成?

提前致谢

1 个答案:

答案 0 :(得分:0)

如果我理解正确,这个黑客必须在你的模板中工作。 首先,我们必须从网址 Slug 中删除帖子类型名称。

function ft_remove_postType_slug_fromUrl( $post_link, $post, $leavename ) {
    if ( 'venue' != $post->post_type || 'publish' != $post->post_status ) {
        return $post_link;
    }
    $post_link = str_replace( '/' . $post->post_type . '/', '/', $post_link );
    return $post_link;
}
add_filter( 'post_type_link', 'ft_remove_postType_slug_fromUrl', 10, 3 );

但这本身不会起作用。如果你在你的函数中使用这段代码。你应该得到404错误。因为WordPress只希望帖子和页面以这种方式行事

因此,您还必须添加此操作。

function ft_change_parsingRequest( $query ) {

    if ( ! $query->is_main_query() || 2 != count( $query->query ) || ! isset( $query->query['page'] ) ) {
        return;
    }
    if ( ! empty( $query->query['name'] ) ) {
        $query->set( 'post_type', array( 'post', 'venue', 'page' ) );
    }
}
add_action( 'pre_get_posts', 'ft_change_parsingRequest' );

在此之后,您续订/刷新您的帖子类型/固定链接树(我猜它会调用flush_rewrites。),这意味着,重新更新管理面板区域的永久链接设置。

或者如果你想看到或做一些魔法,你可以从源网址查看。

https://core.trac.wordpress.org/browser/tags/4.3/src/wp-includes/post.php#L1454

这条线说;

add_permastruct( $post_type, "{$args->rewrite['slug']}/%$post_type%", $permastruct_args );

快乐编码。