自定义发布类型高级弹头

时间:2019-01-08 作者:James Simpson

我已经搜索了一段时间了,我甚至不确定这是否可行。

我有一个自定义的帖子类型“holidays”,用于帖子,并有一个类别分类“locations”,用于放置帖子。

段塞为:

领域com/假日/#列出所有假日

领域com/holidays/{post\\u title}#显示单个帖子

领域com/location/#显示所有位置类别

领域com/location/england#显示该类别中的所有帖子

现在,我在locations分类法中有一些自定义字段,我想在一种类型的SEO登录页中使用这些字段,而不是在实际的类别归档页面中显示它们(该页面将显示该类别下的所有帖子)

所以我想得到的是:

领域com/location/england/overview-将显示有关英格兰的所有SEO内容-从URL字符串中删除/overview将显示所有位置帖子。

这样的事情可能吗?我想让后端的一切尽可能精简和简单,而不必为每个位置创建单独的页面,这些位置已经作为自定义帖子类型中的一个类别存在。

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

使用rewrite endpoint.

第一步是设置ep_mask 当您注册分类法时rewrite 论点请注意,它是一个常量,应保持原样,不带引号:

$args = array(
    \'rewrite\' => array(
        \'slug\' => \'location\',
        \'with_front\' => false,
        \'ep_mask\' => EP_TAGS
    ),
    // your other args...
);
现在,您可以在注册分类法后立即添加重写端点,也可以连接到init:

add_rewrite_endpoint( \'overview\', EP_TAGS );
别忘了flush rewrite rules 在此代码中添加或更改任何内容后。您可以通过访问设置>永久链接页面快速完成此操作。

现在您可以访问

领域com/位置/英格兰/

以及

领域com/位置/英格兰/概述/

要为这些请求加载不同的模板,我们可以使用taxonomy_template 过滤器:

function wpd_location_overview_template( $template ){
    if( false !== get_query_var( \'overview\', false ) ){
        $template = locate_template( \'location-overview.php\' );
    }
    return $template;
}
add_filter( \'taxonomy_template\', \'wpd_location_overview_template\' );
这将加载location-overview.php 从您的子主题或父主题overview 位于URL中。

使用get_queried_object_id()get_queried_object() 在模板中获取与此术语关联的字段。如果您有任何用处,主查询还将包含此术语的帖子。

相关推荐

Slug for custom post type

我在我的网站上使用网页和博客帖子。页面获取URL示例。org/%postname%/,并基于Permalink设置,posts获取URL示例。组织/博客/%postname%/。完美的我有一个自定义的帖子类型,由我网站上的另一个组用于他们的网页。在注册post类型时,我为它们提供了一个重写slug:\'rewrite\' => array(\'slug\' => \'ncfpw\'),然而,他们的页面得到了URL示例。组织/博客/ncfpw/%博文名%/我怎样才能摆脱;博客;在他们的URL中?