我创建了一个名为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_archive
。has_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%%