自定义帖子类型子页面404

时间:2014-07-02 作者:Chris

这个问题似乎很常见,但对其他人有用的解决方案对我却不起作用。

我正在使用CPT UI插件,并创建了一个名为“课程”的CPT,设置如下:

register_post_type(\'courses\', array(
\'label\' => \'Courses\',
\'description\' => \'\',
\'public\' => true,
\'show_ui\' => true,
\'show_in_menu\' => true,
\'capability_type\' => \'post\',
\'map_meta_cap\' => true,
\'hierarchical\' => true,
\'rewrite\' => array(\'slug\' => \'courses\', \'with_front\' => true),
\'query_var\' => true,
\'supports\' => array(\'title\',\'editor\',\'excerpt\',\'trackbacks\',\'custom-fields\',\'comments\',\'revisions\',\'thumbnail\',\'author\',\'page-attributes\',\'post-formats\'),
\'labels\' => array (
  \'name\' => \'Courses\',
  \'singular_name\' => \'Course\',
  \'menu_name\' => \'Courses\',
  \'add_new\' => \'Add Course\',
  \'add_new_item\' => \'Add New Course\',
  \'edit\' => \'Edit\',
  \'edit_item\' => \'Edit Course\',
  \'new_item\' => \'New Course\',
  \'view\' => \'View Course\',
  \'view_item\' => \'View Course\',
  \'search_items\' => \'Search Courses\',
  \'not_found\' => \'No Courses Found\',
  \'not_found_in_trash\' => \'No Courses Found in Trash\',
  \'parent\' => \'Parent Course\',
)
然后,我创建了一个名为“课程”的页面和一个名为“页面课程”的专门页面模板。php和一个名为“单一课程”的模板。php“用于课程自定义帖子类型中的任何帖子。到目前为止,一切正常。

接下来,我创建了一个新页面,以“问题结帐”和“课程”作为其父页面。这一页给出了404。

我尝试了以下方法使其工作:

添加了管理:设置>永久链接和重新保存中的flush_rewrite_rules(); 至功能。php并刷新了“问题签出”页面,安装了“重写规则”插件并刷新了重写规则,使用CPT UI创建了一个新的自定义帖子类型使用上述3个修复中的一个或多个确实修复了404上的“问题检出”。然而,我在课程页面的帖子上得到了404分,例如/课程/帖子标题。

不管我怎么努力,都是其中一个有效——我不能让课程帖子和子页面都是404免费的。

严格地说,我知道页面不应该具有与自定义帖子类型相同的名称,所以我怀疑这就是404的原因。我的下一个方法是删除“courses”页面及其子页面“questions checkout”。然后我改变了“页面课程”。php“to”存档课程。并将“has\\u archive”设置为“true”。

因此,就目前而言,我有一个工作档案页和我的“课程”自定义帖子类型的单数页。但我现在如何添加一个名为“问题签出”的页面,其中包含URL/课程/问题签出?

我正在使用WordPress 3.9.1多站点。

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

在埃里克·霍姆斯的大力帮助下,我想我们已经找到了解决办法。

基本的想法是添加我自己的重写规则来创建我所追求的永久链接结构。

I added this to my functions.php:

function add_rewrite_rules(){
   global $wp;
   $wp->add_query_var( \'fakepage\' );
   $parentpage = \'ADD THE TOP LEVEL PAGE\'S POST ID HERE\';
   add_rewrite_rule(\'courses/checkout/([^/]*)\',\'index.php?page_id=\'.$parentpage.\'&fakepage=$matches[1]\',\'top\');
}
add_action(\'init\',\'add_rewrite_rules\');

Then in page-pagename.php (in my case, page-courses.php):

if(isset($wp_query->query_vars[\'fakepage\'])){
   $fakepage = $wp_query->query_vars[\'fakepage\'];
   if($fakepage==\'questions\'){
      //do whatever
   } else {
      //do whatever
   }
}

SO网友:Eric Holmes

当您第一次注册新的帖子类型时,您需要访问Settings -> Permalinks 所以WordPress可以为它设置永久链接规则。你甚至不需要点击save,访问页面就足够了。

结束

相关推荐

Custom permalinks structure

我希望有这样的结构:www.mysite.com/2013 (必须显示2013年的所有职位)www.mysite.com/my-category/2013 (必须显示2013年和“我的类别”类别的所有帖子)www.mysite.com/my-category/my-tag/ (必须显示所有类别为“我的类别”和标记为“我的标记”的帖子)www.mysite.com/my-category/ (必须显示“我的类别”类别的所有帖子)www.mysite.com/my-