如何处理此URL结构。一直收到“找不到页面”的提示

时间:2016-03-23 作者:user91092

我创建了两种自定义帖子类型,分别为"test""articles".

我正在尝试实现以下URL结构:

网站。com/测试/帖子标题-针对帖子类型test. 工作正常站点。com/测试/文章/帖子标题-针对帖子类型articles

我有updated permalinks 从…起Admin > Settings > Permalinks.

在自定义帖子类型时"articles" 注册我声明:

\'rewrite\' => array(\'slug\' => \'test/articles\')

有没有办法处理此URL格式?

更新时间:

$args = array(
    \'has_archive\' => false,
    \'hierarchical\' => true,
    \'public\' => true,
    \'label\'  => __( \'Test\', \'domain\'),
    \'supports\' => array( \'title\', \'editor\', \'author )
);

register_post_type( \'test\', $args );

$args = array(
    \'public\' => true,
    \'has_archive\' => true,
    \'label\' => __( \'Articles\', \'domain\' ),
    \'supports\'  => array( \'title\', \'editor\', \'author\' ),
    \'rewrite\' => array(\'slug\' => \'test/articles\')
);

register_post_type( \'articles\', $args );

1 个回复
最合适的回答,由SO网友:Adam 整理而成

问题是,无论何时,只要你尝试去一个帖子,比如:

http://example.com/test/articles/example-slug/
                    ↑      ↑
                    |      └ attempts to match "articles" as name/pagename query variable 
                    └ matches post_type "test"
WordPress正在尝试匹配/test/articles, 如中所示articles 担任…的职务post_type === test.

相反,您需要添加自定义重写规则(然后刷新重写规则):

function wpse221472_custom_rewrite_rules() {

  add_rewrite_rule(
    \'^test/(articles)/(.*)?\', 
    \'index.php?post_type=$matches[1]&name=$matches[2]\', 
    \'top\'
  );

}

add_action(\'init\', \'wpse221472_custom_rewrite_rules\');
这将匹配:

                       $matches[1]  $matches[2]
                           ↓            ↓
http://example.com/test/articles/example-slug/
不确定这是否是最好的方法,但它会起作用,只是要知道,您不能在test post_type 那有点articles 因为它不会被匹配;我们的重写规则将覆盖它。

如果你不介意的话,以上内容就足够了。

相关推荐

Altered Media Library URLs

我有一个客户的网站,是在他们离开另一家代理机构后我找到的。该机构使用了一个专有主题和自己的自托管页面生成器,以防止其在除他们之外的任何其他托管环境中更新或编辑。它的另一个方面是重新映射主题的URL并上载目录。因此,例如,代替WP在中查找主题文件http://domain.com/wp-content/themes/…. 它在里面找他们http://domain.com/t/….同样,对于图像上载,也可以在http://domain.com/wp-content/uploads/…, 它在里面找他们http