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

Dav*_*nes 5 php wordpress

我创建了一个名为的帖子类型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")
    )
);
Run Code Online (Sandbox Code Playgroud)

use*_*953 7

您还可以使用:

'has_archive' => 'marketplace'
Run Code Online (Sandbox Code Playgroud)

这样存档页面的 slug 将是 /marketplace 而单个页面将是 /listing


Nat*_*son 6

独立于单个帖子更改存档别名

自定义帖子类型的默认 slug 将与帖子类型键(函数的第一个参数)匹配。在您发布的示例中,这将是listing. 然后,您可以通过在重写下指定新的 slug 来继续更改它。然而,这将影响单个帖子和存档。

要设置存档 slug,同时保留单个帖子的常规 slug,您应该使用has_archivehas_archive是一个误导性的名称,因为它接受布尔值或字符串。将其设置为 true 将生成存档页面。相反,传入一个字符串将允许您自定义 slug:

'has_archive' => 'marketplace',
Run Code Online (Sandbox Code Playgroud)

上下文中的示例:

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' ],        
]);
Run Code Online (Sandbox Code Playgroud)

刷新永久链接

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

为此,请转到管理中的“设置”->“永久链接”并点击“保存”(无需更改)。

如果您要创建要分发的内容,您可能希望以编程方式进行。您需要flush_rewrite_rules()通过挂钩插件激活或after_switch_theme操作来运行。文档可以在这里找到:https ://codex.wordpress.org/Function_Reference/flush_rewrite_rules