使用 Post 类型模板重写自定义 Post 类型 URL

Custom Post Type URL rewrite with Post Type Template

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

我想要实现的是一个符合逻辑的 URL 结构,例如 example.com/productions/for-big/name-of-adult-production。现在我有 URLs 像 example.com/productions_big/name-of-adult-production 因为 productions_big 是 CPT 的名称。

我熟悉在注册自定义 post 类型时应该传递的 rewrite 参数。我已经按照 Whosebug 上建议的所有方式完成了此操作,但它只是行不通。这是我用来注册 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);

  }

}

如你所见,我尝试了 'rewrite' => array('slug' => 'bla') 因为我想知道它是否当我写 'rewrite' => array('slug' => 'productions/for-big')

时,因为页面名称冲突而无法工作

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

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

旁注:最终目标是制造子弹 "dynamic"。这意味着它会随着后端页面名称的更改而改变。我可能会尝试 this approach,但在此之前我必须解决此处描述的基本问题。

非常感谢任何想法。感谢您阅读到这里。

哦,孩子,看来你必须 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 类型会发生冲突。