Php 使用帖子类型模板自定义帖子类型URL重写

Php 使用帖子类型模板自定义帖子类型URL重写,php,wordpress,custom-post-type,permalinks,Php,Wordpress,Custom Post Type,Permalinks,我正在为一家视频制作公司建立一个Wordpress网站。他们为成人和儿童制作视频,因此我在后端拆分帖子以保持结构。因此,设置如下所示: 两个名为productions\u big和productions\u small的自定义帖子类型 名为Productions的页面,放置在主导航中,带有指向的链接 对于大页面和小页面 一个页面列出了productions_big的帖子,一个页面列出了 你的作品很小。页面名称用于大页面和小页面,两者都是Productions页面的子页面 URL对于页面来说非常

我正在为一家视频制作公司建立一个Wordpress网站。他们为成人和儿童制作视频,因此我在后端拆分帖子以保持结构。因此,设置如下所示:

  • 两个名为productions\u big和productions\u small的自定义帖子类型
  • 名为Productions的页面,放置在主导航中,带有指向的链接 对于大页面和小页面
  • 一个页面列出了productions_big的帖子,一个页面列出了 你的作品很小。页面名称用于大页面和小页面,两者都是Productions页面的子页面
  • URL对于页面来说非常好,因为我建立了相关页面的父/子关系。example.com/productions将指向正确的页面,example.com/productions/for-big和example.com/productions/for-small do也将指向正确的页面
  • 由于与此问题无关的原因,模板 CPT不同,但在某些情况下,大模板用于小模板,反之亦然。这背后没有实际的逻辑,因此决定使用哪个模板是通过Wordpress 4.7引入的功能在后端完成的
我想要实现的是一个逻辑URL结构,比如example.com/productions/for-big/name-of-madure-production。现在我有像example.com/productions\u big/name-of-maintal-production这样的URL,因为productions\u big是CPT的名称

我熟悉注册自定义帖子类型时应该传递的重写参数。我已经按照stackoverflow建议的所有方式完成了这项工作,但它根本不起作用。下面是我用来注册我的CPT的代码摘录:

add_action('init', 'all_custom_post_types');

function all_custom_post_types() {

  $types = array(

    array('the_type' => 'productions_big',
                ...

    array('the_type' => 'productions_small',
                ...

);

  foreach ($types as $type) {

  $the_type = $type['the_type'];
    ...

  $args = array(
    'labels'        => $labels,
    'public'        => true,
    'publicly_queryable' => true,
    'show_ui'       => true,
    'query_var'     => true,
    'rewrite'       => true,
    'capabilities'  => array(
      ...),
    'rewrite'       => array('has_archive' => false, 'slug' => 'bla', 'with_front' => false),
    'has_archive'   => false,
    'map_meta_cap'  => true,
    'hierarchical'  => false,
    'menu_position' => 5,
    'supports'      => array('title','editor','thumbnail', 'taxonomies'),
    'taxonomies'    => array( 'category' )
  );

    register_post_type($the_type, $args);

  }

}
如您所见,我尝试了“重写”=>array('slug'=>'bla'),因为我想知道当我编写“重写”=>array('slug'=>'productions/for big'时,它是否因为页面名称冲突而无法工作

但是不管我给slug什么值,它总是将我重定向到index.php

我认为它不起作用的原因是我分配post模板的方式(记住:作为后端的post属性,而不是专用的单个xxx.php文件),但我在任何地方都找不到解决方案。所有提出问题的寻求解决方案的人都在用老式的单名方式分配模板(这对我来说是不可能的)

旁注:最终目标是使slug“动态”。这意味着,如果页面名称在后端发生更改,它会发生更改。我可能会尝试,但在此之前,我必须解决这里描述的基本问题


任何想法都值得赞赏。感谢您阅读本文。

哦,孩子,看来您必须发布您的问题,以便自己找到答案。在尝试设置另一个CPT后,一切都很顺利

这让我调查了之前CPT的注册情况。正如您在上面看到的,我试图在one函数中注册我的CPT

function all_custom_post_types() {

  $types = array(
    array('the_type' => 'productions_big', ...
    array('the_type' => 'productions_small', ...
  );

  foreach ($types as $type) {

  $args = array(...
    'rewrite'       => array('slug' => 'bla'),...
  );

  register_post_type($the_type, $args);

  }

}

因此,最终,我的页面的slug和自定义post类型之间没有冲突,而是将一个相同的slug分配给两个不同的post类型

哦,天哪,看来你得把你的问题贴出来才能自己找到答案。在尝试设置另一个CPT后,一切都很顺利

这让我调查了之前CPT的注册情况。正如您在上面看到的,我试图在one函数中注册我的CPT

function all_custom_post_types() {

  $types = array(
    array('the_type' => 'productions_big', ...
    array('the_type' => 'productions_small', ...
  );

  foreach ($types as $type) {

  $args = array(...
    'rewrite'       => array('slug' => 'bla'),...
  );

  register_post_type($the_type, $args);

  }

}
因此,最终,我的页面的slug和自定义post类型之间没有冲突,而是将一个相同的slug分配给两个不同的post类型