自定义帖子类型URL重写与帖子类型模板

时间:2017-10-03 14:39:18

标签: php wordpress custom-post-type permalinks

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

  • 两个名为 productions_big productions_small
  • 的自定义帖子类型
  • 一个名为 Productions 的页面,放在主导航栏中,带有链接 For Big For Small pages
  • 一个列出 productions_big 帖子的页面,其中一个列出了帖子 productions_small 。页面名称为 for-big for-small ,两者都是 Productions 页面的子项
  • 由于我建立了相关网页的父/子关系,因此网页完全没问题。 example.com/productions 指向正确的页面以及 example.com/productions/for-big example.com/productions/for-small < / em>做。
  • 由于与此问题无关的原因,模板为 CPT有所不同,但在某些情况下,template-big用于productions_small,反之亦然。这背后没有实际的逻辑,因此决定使用哪个模板是通过Wordpress 4.7引入的Post Type Template功能在后端完成的。

我想要实现的是一个逻辑URL结构,例如 example.com/productions/for-big/name-of-adult-production 。现在我有像 example.com/productions_big/name-of-adult-production 这样的网址,因为productions_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);

  }

}

如你所见,我试过'rewrite'=&gt; array('slug'=&gt;'bla')因为当我写'rewrite'=&gt;时我想知道它是否因为页面名称冲突而无效array('slug'=&gt;'productions / for-big')

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

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

旁注:最终目标是使slu“”动态“。这意味着如果在后端更改页面名称,它会发生变化。我可能会尝试this approach但事先我必须摆脱这里描述的基本问题。

非常感谢任何想法。谢谢你阅读这篇文章。

1 个答案:

答案 0 :(得分:0)

哦,男孩,似乎你必须发布你的问题才能自己找到答案。在尝试设置另一个CPT后,一切都像一个魅力。

这让我调查了之前CPT的注册情况。如您所见,我尝试在一个功能

中注册我的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到两种不同的帖子类型的冲突。