特定自定义发布类型的自定义终结点

时间:2021-07-15 作者:Baisnabi

我注册了一个新的帖子类型

register_post_type(\'movie\', array(
    \'labels\'            =>  array(
        \'name\'               => __(\'Movies\'),
        \'singular_name\'      => __(\'Movie\'),
        \'all_items\'          => __(\'View Movies\'),
        \'add_new\'            => __(\'New Movie\'),
        \'add_new_item\'       => __(\'New Movie\'),
        \'edit_item\'          => __(\'Edit Movie\'),
        \'view_item\'          => __(\'View Movie\'),
        \'search_items\'       => __(\'Search Movie\'),
        \'no_found\'           => __(\'No Movie Found\'),
        \'not_found_in_trash\' => __(\'No Movie in Trash\')
    ),
    \'public\'             => true,
    \'publicly_queryable\' => true,
    \'show_ui\'            => true,
    \'query_var\'          => true,
    \'show_in_nav_menus\'  => false,
    \'capability_type\'    => \'page\',
    \'hierarchical\'       => true,
    \'rewrite\'            => [\'slug\' => \'movie\'],
    \'supports\'           => array(\'title\', \'editor\', \'thumbnail\'),
    \'has_archive\'        => true
));
和我的URL永久链接集Post name. 我的电影在字体页上显示为[mydomain]/movie/%postname%. 现在我只想在我的电影帖子类型中做一些小节。

  • [mydomain]/movie/%postname%/artists/
  • [mydomain]/movie/%postname%/songs/
  • [mydomain]/movie/%postname%/news/
  • [mydomain]/movie/%postname%/videos/.../page/2/ E、 g级

    • [mydomain]/movie/%postname%/news/page/2/

      add_action(\'init\', \'my_custom_post_endpoint\');
      function my_custom_post_endpoint()
      {
          add_rewrite_endpoint(\'news\', EP_PAGES);
          add_rewrite_endpoint(\'videos\', EP_PAGES);
      
          add_rewrite_endpoint(\'news\', EP_PERMALINK);
          add_rewrite_endpoint(\'videos\', EP_PERMALINK);
      }
      
      但是有了这个,它就工作了,但是[mydomain]/movie/%postname%/news/page/2/ 不工作。我是说.../page/2 不工作。

      问题:

      如何为movie 仅post类型.../page/2 在端点之后

1 个回复
SO网友:Sally CJ

我注意到你的帖子类型是hierarchical, 所以你可以加上page-attributessupports post type args中的数组,即。\'supports\' => array(\'title\', \'editor\', \'thumbnail\', \'page-attributes\'), 然后您可以创建这些子节作为movie 职位。但是是的,子帖子需要使用独特的slug,比如news, news2, news-3, 等

因此,如果不是首选,那么可以继续使用endpoint方法。

但是add_rewrite_endpoint() 不添加分页的重写规则(/page/<number> 一个和EP_PAGES 因此您可能希望使用add_rewrite_rule() 并更好地控制重写规则。

下面是一个示例,您可以测试RegEx(正则表达式)模式here:

function my_custom_post_endpoint()
{
    add_rewrite_rule(
        \'^movie/(.+?)/(news|videos)(?:/page/(\\d+)|)/?$\',
        \'index.php?movie=$matches[1]&paged=$matches[2]\',
        \'top\'
    );
}
应用上述代码后,不要忘记刷新重写规则。只需访问permalink设置管理页面,无需单击保存更改按钮。

相关推荐

Force pretty permalinks?

我正在构建一个插件,该插件将用于单个站点,并依赖于add_rewrite_rule 要工作,需要打开永久链接。打开它们并不困难,因为它只是一个站点,但我担心其中一个管理员可能会在不知道自己在做什么的情况下关闭它,并破坏该站点。如何以编程方式强制保持漂亮的永久链接?