如何使用不同于帖子类型名称的归档段塞创建自定义帖子类型


How to create a custom post type with an archive slug that differs from the post type name

我创建了一个名为listing的帖子类型和一个附带的存档页面archive-listing.php。当我导航到/listings时,存档页面加载正常。但是,我希望存档URL为/marketplace。我在下面定义rewrite属性,但它似乎不起作用。我错过了什么?

register_post_type("listing",
    array(
        "menu_icon" => "dashicons-tag",
        "labels" => array(
            "name" => __( "Listings" ),
            "singular_name" => __("Listing")
        ),
        "public" => true,
        "has_archive" => true,
        "rewrite" => array("slug" => "marketplace"),
        "supports" => array("title", "editor"),
        "taxonomies" => array("listing_status")
    )
);

您也可以使用:

'has_archive' => 'marketplace'

这样归档页面的段塞将是/marketplace,单个页面将是/listing

独立于单个帖子更改归档段塞

自定义post类型的默认段塞将匹配post类型键(函数的第一个参数)。在你发布的例子中,那将是listing。然后,您可以通过在重写下指定一个新的代码段来更改它。但是,这将同时影响单个帖子和存档。

要在为单个文章保留常规段塞的同时设置存档段塞,您应该使用has_archivehas_archive是一个容易引起误解的名称,因为它接受布尔值或字符串。将其设置为true将生成存档页面。而传入字符串则允许您自定义段符:

'has_archive' => 'marketplace',

上下文示例:

register_post_type( 'listing', [
    'menu_icon' => 'dashicons-tag',
    'labels' => [
        'name' => __( 'Listings' ),
        'singular_name' => __( 'Listing' ),
    ],
    'public' => true,
    'has_archive' => 'marketplace',
    'supports' => [ 'title', 'editor' ],
    'taxonomies' => [ 'listing_status' ],        
]);

冲洗永久链接

当你注册一个新的自定义帖子类型时,你需要刷新你的永久链接。

要做到这一点,请进入设置->永久链接在管理和点击保存(不需要更改)。

如果你正在创建一些将要分发的东西,你可能想要用编程的方式来完成它。您需要通过连接到插件激活或after_switch_theme动作来运行flush_rewrite_rules()。文档可以在这里找到:https://codex.wordpress.org/Function_Reference/flush_rewrite_rules

尝试将Settings->永久链接结构更新为默认值,然后更新为%%postname%%