自定义帖子类型和自定义分类归档不可访问

时间:2013-04-22 作者:Agustinus Verdy

我创建了一些自定义帖子类型,比如:

  • post_type_1
  • post_type_2
这些帖子类型相互关联,每post_type_1 有许多孩子的父母post_type_2.然后,我为post_type_2, 我们叫它吧tax_1.代码如下:

function registerPostType1() {
  $supports = array(
    \'title\', \'editor\', \'thumbnail\', \'excerpt\',
    \'comments\', \'post-formats\'
  );
  $args = array(
    \'public\' => true,
    \'hierarchical\' => false,
    \'query_var\' => false,
    \'has_archive\' => true,
    \'rewrite\' => array(\'slug\' => \'posttype1\'),
    \'supports\' => $supports
  );
  register_post_type(\'post_type_1\', $args);
}


function registerPostType2() {
  $supports = array(
    \'title\', \'editor\', \'author\', \'thumbnail\', \'excerpt\',
    \'comments\', \'post-formats\'
  );
  $args = array(
    \'public\' => true,
    \'hierarchical\' => false,
    \'query_var\' => false,
    \'has_archive\' => true,
    \'rewrite\' => array(\'slug\' => \'post-type-2\'),
    \'taxonomies\' => array(\'post_tag\'),
    \'supports\' => $supports
  );
  register_post_type(\'post_type_2\', $args);
}


function registerTax1() {
  $args = array(
    \'hierarchical\' => false,
    \'query_var\' => \'tax-1\'
  );
  register_taxonomy(\'tax-1\', \'post_type_2\', $args);
}


add_action(\'init\', \'registerPostType2\');
add_action(\'init\', \'registerTax1\', 0);


function registerPostType1Query() {
  add_rewrite_tag(\'%posttype1%\',\'([^&]+)\');
}

function addPostType1QueryVar($query_vars) {
  $query_vars[] = \'posttype1\';
  return $query_vars;
}

function modifyPostType2Query($query) {
  if ($query->is_main_query() &&
  haveTaxonomyQuery($query, \'tax-1\')) {
    $query->set(\'orderby\', \'rand\'); // Randomly order the posts
    $query->set(\'posts_per_page\', 1); // Show only one post

    $query->set(\'meta_key\', \'posttype1\');
    $query->set(\'meta_value\', $query->query_vars[\'posttype1\']);
  }
}

function haveTaxonomyQuery($query, $taxToFind) {
  if (!property_exists($query, \'tax_query\') ||
  empty($query->tax_query) ||
  !property_exists($query->tax_query, \'queries\')) {
    return FALSE;
  }

  foreach ($query->tax_query->queries as $index => $taxQuery) {
    if ($taxQuery[\'taxonomy\'] === $taxToFind)
      return TRUE;
  }
  return FALSE;
}


add_action(\'init\', \'registerPostType1Query\');
add_filter(\'query_vars\', \'addPostType1QueryVar\');
add_action(\'pre_get_posts\', \'modifyPostType2Query\');
现在我正在尝试为post_type_1 其中对于每个post_type_1 第页他们有一个指向存档的链接第页,共页tax-1 (比如说term-1 &;term-2) 该页面将用于过滤下面的1篇随机帖子tax-1 (取决于单击了哪个术语)并与之前的post_type_1 邮递

简言之,这就像city (post_type_1), people (post_type_2) 和gender (tax-1) 然后使用male (term-1) 和female (term-2).

因此,我有:

  • single-post_type_1.php
  • single-post_type_2.php
  • taxonomy-tax-1.phptaxonomy-tax-1.php page,在里面single-post_type_1.php 文件:

    <a href="<?php echo get_term_link(\'term-1\', \'tax-1\') ?>?posttype1=<?php the_ID(); ?>">
      <img src="<?php bloginfo(\'template_url\'); ?>/images/term-1.jpg" />
    </a>
    
    起初,链接显示了404页,然后我从设置中刷新了永久链接,效果很好。然而,第二天,当我再次访问该页面时,它显示了索引页面,直到我再次刷新永久链接。

    我还尝试安装一个重写分析器插件,如Monkeyman Rewrite Analyzer 并尝试比较每一次重写(正常重写和显示主页的错误重写)。不同的是,其中一个显示的错误类似于(在tax-1 重写规则的替换):

    此查询变量不是公共变量,不会保存

    有人知道我做错了什么吗?每次都要刷新永久链接,这真的很烦人。任何帮助都将不胜感激。

    提前谢谢。

1 个回复
SO网友:Agustinus Verdy

最后我找到了解决办法。我认为问题是因为我没有手动指定分类法归档页面的重写规则,因为我认为我只需要一些简单的url(默认),所以根本不需要添加重写规则。

因此,我尝试了以下代码,并添加了一些在激活主题时挂接的刷新规则:

add_rewrite_rule(\'tax-1/([^/]+)/\\?posttype1=([0-9]+)?$\', \'index.php?tax-1=$matches[1]&posttype1=$matches[2]\', \'top\');
TheMonkeyman Rewrite Analyzer 我这样想,说明以下内容也很有帮助:

此查询变量不是公共变量,不会保存

因此,我来到了这个链接:How to properly rewrite url by custom var

结束

相关推荐