选项1:启用post类型存档并使用post类型存档模板
启用存档;e、 g.使用注册帖子类型时
register_post_type()
:
register_post_type( \'shop\', [
\'has_archive\' => \'shop\', // the archives are accessible at example.com/shop
// ...
] );
然后创建自定义
archive template 仅针对该职位类型;i、 e。
archive-shop.php
.
您可以使用add_rewrite_rule()
重写example.com/shop/category/<category slug>
到example.com/?category_name=<category slug>&post_type=shop
:
// This should be called in `init`.
add_rewrite_rule(
\'^shop/category/([^/]+)/?$\',
\'index.php?category_name=$matches[1]&post_type=shop\',
\'top\'
);
您需要使用
pre_get_posts
钩子来过滤主WordPress查询(因为我可以看到您正在使用一些自定义查询变量/值)。但在归档模板中,您不需要自定义
WP_Query
查询(即。
$shop = new WP_Query
).
选项2:如果需要使用以自定义帖子类型显示帖子的自定义页面通过“自定义页面”,我指的是具有以下类型的帖子page
. 此外,使用此选项的优点是,您不需要启用默认的post类型存档。
因此,首先,获取使用自定义模板的页面ID(template-shop.php
).
您可以使用add_rewrite_rule()
重写example.com/shop/category/<category slug>
到example.com/?shop_cat=<category slug>&page_id=<page ID>
&mdash;"shop_cat" can be changed 到其他非保留名称,但您还需要在步骤#3&;中更改名称#以下4项:
// This should be called in `init`.
add_rewrite_rule(
\'^shop/category/([^/]+)/?$\',
// Make sure to use the correct Page ID.
\'index.php?shop_cat=$matches[1]&page_id=2\',
\'top\'
);
您可以使用
query_vars
钩子以添加
shop_cat
公共WordPress查询变量的变量:
add_filter( \'query_vars\', function ( $vars ) {
$vars[] = \'shop_cat\';
return $vars;
} );
英寸template-shop.php
或者只要有必要,就打电话get_query_var( \'shop_cat\' )
要从URL检索类别slug,请执行以下操作:$args = array(
\'post_type\' => array( \'shop\' ),
\'order\' => \'ASC\',
\'posts_per_page\' => -1,
);
if ( $category = get_query_var( \'shop_cat\' ) ) {
$args[\'category_name\'] = $category;
}
$shop = new WP_Query( $args );
最后但并非最不重要的一点是,上述两个选项还有其他变体,但我提供的这些选项应该可以帮助您开始使用。