为什么自定义分类术语档案什么也没有显示?

时间:2013-06-09 作者:whiteletters in blankpapers

我有一个自定义的帖子类型,我为它创建了一个名为“tag”的自定义分类法。taxonomy-tag.php 文件如下所示:

<?php get_header(); ?>

<?php $term = get_term_by( \'slug\', get_query_var( \'term\' ), get_query_var( \'taxonomy\' ) ); ?>

      <h1 class="page-title"><?php echo $term->name; ?> Archives</h1>

      <?php if (have_posts()) : ?>
        <?php while (have_posts()) : the_post(); ?>

          <div class="post type-post hentry">

              <a href="<?php echo get_permalink(); ?>" title="<?php the_title(); ?>">
                <?php the_title(); ?>
              </a>
          </div>

        <?php endwhile; ?>
      <?php endif; ?>


<?php get_footer(); ?>
执行此代码时,它只显示循环之外的内容。即使我有许多特定自定义帖子类型的帖子绑定到自定义分类法的许多术语,循环也找不到任何结果。

你有没有遇到过这样的问题?我被困住了,你的帮助非常宝贵。

3 个回复
最合适的回答,由SO网友:whiteletters in blankpapers 整理而成

Solution:

起初,我认为在使用所需的参数创建一个新查询后,我解决了问题。我添加的代码是:

<?php

$args = array(
    \'paged\' => $paged,
    \'post_type\' => \'post_type_name\',
    \'tax_query\' => array(
                      array(\'taxonomy\' => \'tag\',\'terms\' =>  $term->term_id)));

 $query = new WP_Query($args); ?>
<?php if ($query->have_posts()) : while ($query->have_posts()) : $query->the_post(); ?>
然后,在Milo评论之后,我发现我不必自己在模板中执行默认查询,主查询发生在加载模板之前。然后我需要一种方法来检查$wp_query global以查看主查询失败的原因。方法是:

 echo \'<pre dir="ltr">\';
    print_r($GLOBALS[\'wp_query\']);
  echo \'</pre>\';
结果是:

[query_vars] => Array
        (
            [tag] => alaa
   ....................................
            [taxonomy] => tag
            [term] => alaa
正如你在这里看到的,我把“alaa”作为我的学期名称,也作为我的贴子标签。这是因为我定义了一个名为“tag”的自定义分类法,它为两个不同的事物提供了相同的url。换句话说,blog/tag/alaa 将引用标记为“alaa”的默认帖子的存档,并将引用具有自定义分类法的自定义帖子类型帖子的存档\'tag\' 和术语名称\'alaa\'.

因此,我在注册时更改了自定义分类名称\'tag\'\'othername\'.

现在,Wordpress考虑一下blog/tag/alaablog/othername/alaa 自然是两件不同的事情。

请注意,我的更改直到单击permalinks设置下的保存更改而没有进行任何更改(可能是为了刷新重写规则)才生效。

SO网友:s_ha_dum

您自己通过运行一个新查询解决了这个问题,但由于@Milo在您的问题的注释中指出,不需要新查询。主查询应该自动执行辅助查询正在执行的操作。

我怀疑这和你的方式有关registered that custom post type, 因为我只能在向\'public\' => false 论点可能还有其他参数可以做到这一点,或者参数组合,但这是我在不太详尽的搜索中找到的唯一一个参数。使用\'public\' => true 注册帖子类型时(如果尚未注册)。

SO网友:thirdender

对于自定义帖子类型,您需要钩住pre_get_posts. 默认情况下,分类法页面仅显示类型为post, page, 和attachment.

// Ensure that our custom post types appear in the taxonomy archive pages
add_action(\'pre_get_posts\', \'add_my_custom_post_type_to_taxonomy\');
function add_my_custom_post_type_to_taxonomy($query) {
  if (empty($query->query_vars[\'suppress_filters\'])) {
    if (is_tax(\'my_custom_taxonomy_type\')) {
      $query->set(\'post_type\', array(\'my_custom_post_type\'));
    }
  }
}

结束

相关推荐

我如何只为一个类别制作Archives.php?

我有基本的档案。php文件。我试图让它只显示类别1中的帖子。当我执行query\\u posts(\'cat=1\')时,URL将被忽略,并显示类别1中的所有帖子。例如,假设我在类别1中有一篇帖子:它叫做“测试帖子”,日期是2012年11月1日。假设我在2012年4月2日的第5类中有另一篇帖子。使用当前存档。php(使用cat 1的查询帖子)URL:http://testing.com/2012/04 解析为显示类别1中的所有帖子。不好,因为帖子的日期是11月,URL查询的是4月(04)。档案馆。php将