Wordpress 自定义 post_type 存档 url 和默认查询

Wordpress custom post_type archive url and default query

我现在正在使用 wordpress 4.2,并在其上为我自己的网站开发主题。

我在我的主题中定义了许多自定义 post 类型,现在我正在寻找一种方法来为它们制作一些存档页面。


例如,我有一个名为 shop 的 post_type,并为其分配了一个名为 region 的分类法。

我创建了一个模板文件:category-region.php

然后我访问这个模板的永久链接:http://example.com/category/region/,这个模板被匹配,并用所有指定的商店初始化查询,然后显示它们。

但现在我想制作一个包含所有 post 商店的页面,无论它们分配在哪个区域。

我应该如何命名模板文件以及永久链接呢?


我检查了模板层次结构并找到了下图。

https://developer.wordpress.org/themes/basics/template-hierarchy/

看来archive-$post_type.php是我想要的

但是指向这个模板的永久链接呢?

您传递给 register_post_type 的参数中的 rewrite 参数决定了您的自定义 post 类型存档的永久链接。

https://codex.wordpress.org/Function_Reference/register_post_type

查看文档中的示例:

$args = array(
    'labels'             => $labels,
    'public'             => true,
    'publicly_queryable' => true,
    'show_ui'            => true,
    'show_in_menu'       => true,
    'query_var'          => true,
    'rewrite'            => array( 'slug' => 'book' ),
    'capability_type'    => 'post',
    'has_archive'        => true,
    'hierarchical'       => false,
    'menu_position'      => null,
    'supports'           => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'comments' )
);

register_post_type( 'book', $args );

您可以看到书籍 CPT 的重写 slug 是 book,因此书籍存档的 URL 将是 example.com/book/

在您的情况下,如果您将重写 slug 设置为 shop(或者如果您没有设置重写 slug,在这种情况下它将默认为您的 CPT slug),URL 对应于您的 archive-shop.php 模板将是 example.com/shop/.

请注意,这假设您正在使用永久链接,如果您没有使用永久链接,商店 post 类型的存档位于 example.com/?post_type=shop。如果您使用永久链接,请确保在设置 CPT 后访问 Settings > Permalinks 页面刷新它们。