【问题标题】:How to create a custom post type with an archive slug that differs from the post type name如何使用不同于帖子类型名称的存档 slug 创建自定义帖子类型
【发布时间】:2016-09-09 00:39:01
【问题描述】:

我创建了一个名为 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")
    )
);

【问题讨论】:

  • 你的方法是正确的。您已经刷新了永久链接规则,对吧(一种方法是在管理员中转到“设置”->“永久链接”并点击“保存”)?这需要在设置新的 slug 后完成。
  • 除了 Nathan Dawson 的建议外,请确保没有页面或帖子具有相同的 slug,因为它可能优先于重写规则中的存档。您遇到什么错误?
  • 谢谢!刷新永久链接规则就可以了。我没有意识到我必须这样做。
  • @NathanDawson 如果您将评论作为答案发表,我会继续选择您的答案,因为您是第一个回复的人。谢谢!
  • @DavidJones - 谢谢,会的

标签: php wordpress


【解决方案1】:

你也可以使用:

'has_archive' => 'marketplace'

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

【讨论】:

  • 这应该是公认的答案..简单有效的解决方案。谢谢!
【解决方案2】:

独立于单个帖子更改存档 slug

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

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

'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

【讨论】:

    【解决方案3】:

    尝试将 Settings->Permalink 结构更新为默认值,然后更新为 %%pos​​tname%%

    【讨论】:

      猜你喜欢
      • 2020-06-06
      • 2016-01-18
      • 2013-06-02
      • 1970-01-01
      • 2017-09-19
      • 1970-01-01
      • 1970-01-01
      • 2021-10-01
      • 2021-08-21
      相关资源
      最近更新 更多