Wordpress类别过滤器不会过滤子类别

时间:2014-12-29 14:47:30

标签: php wordpress categories custom-post-type wp-query

我有多个子类别,例如

    • child 1
    • child 2
    • child 3
    • child 4

使用自定义帖子类型。

我想要覆盖的是我的自定义类别模板:

所有子类别的列表(链接)以及每个类别包含的自定义帖子的数量。

<div class="category">
<h3>Category:</h3>
<?php
    $args = array(
    'post_type' => 'books',
    'orderby' => '_swauteur',
    'order' => 'ASC',
    'parent' => '513' 
                 );
    $categories = get_categories($args);
    foreach($categories as $category) { 
    echo '<div class="cat"><h2><a href="' . get_category_link( $category->term_id ) . '" title="' . sprintf( __( "have a look at %s" ), $category->name ) . '" ' . '>' 
. $category->name.'</a></h2><br /><p>Books: '. $category->count.' </p></div> '; 
 } 
?>
</div>

这是一个魅力,我得到包含帖子的所有类别!

然后在循环中,来自4个子类别的所有帖子

    <div class="box">   

     <div class="post-alt blog">

<ul class="article-list article-list--related">
<?php $books = new WP_Query( $args ); while ( $books->have_posts() ) : $books->the_post();?>  
<li class="article-list_item  tile post-tile">
 <article class="article-list_article">   
    <section class="article">
      <div class="article_thumb"><?php if ( has_post_thumbnail() ) { the_post_thumbnail('thumbnail');} else { echo '<img src="' . get_bloginfo( 'stylesheet_directory' ) . '/images/placeholder.png" />';}?></div>
      <div class="article_title"><h1><?php the_title(); ?></h1>
          <p>Auteur: <?php echo get_post_meta($id, "_swauteur", true); ?></p>
          <p class="article_pub-date">Publicatie datum:<?php echo date('d-m-Y', strtotime(get_post_meta($id, "_pubdatum",true)));?></p>
        </div>
        <div class="article_excerpt">
            <p class="article_excerpt_content"><?php the_excerpt(); ?></p>
          <p><a title="<?php _e('Read More'); ?>" href="<?php the_permalink() ?>" rel="bookmark">Lees meer</a></p>

        </div>

    </section>
  </article>
</li>             
</ul>

<?php endwhile; ?>          
                </div><!--/post-alt blog-->

    <div class="navigation">
    <div class="alignleft"><?php next_posts_link(__('&laquo; Previous Entries')) ?>   </div>
    <div class="alignright"><?php previous_posts_link(__('Next Entries &raquo;')) ?></div>
    </div>      

</div> <!--closebox-->  

    </div><!--/col1-->

<?php get_sidebar(); ?>

<?php get_footer(); ?>

这也有效,我收到所有类别的所有帖子!!

但这是我的问题:

我无法弄清楚如何将两者结合起来,因为当我点击子1的类别链接时,没有选择,我仍然可以获得其他子类别的所有帖子。

3 个答案:

答案 0 :(得分:1)

你必须使用约束参数做几个不同的WP_Query,才能获得你想要的那些帖子。如果您希望将它们限制为一个子类别,则必须执行多个循环。

您可能必须为这些类别页面制作模板并将自定义循环放在那里,或者更好地避免重复代码,您可以创建category.php模板,在其中检查全局$query以确定在生成循环之前,询问了哪个子类别并设置了正确的$args

<强>更新

当您使用自定义查询时,WP会返回您的自定义查询$ args指定的帖子。在正常情况下,WP会根据您显示的网址和查询网址的参数获取$args。如果单击您的子类别链接,您会发现它指定了URL中的类别。由于您运行自己的查询,WP会忽略您所在的页面。好吧,它并没有真正忽略它,但它将它的循环放在全局变量$query中,而你正在显示$books的循环。

所以,我们必须做同样的事情。找出用户要求的类别,然后将其添加到您的图书查询中:

'cat' => get_query_var( 'cat' )

功能get_query_var确切地说明了这一点。如果它考虑了uri及其参数,你可以获得WP可能使用的任何值。为简洁起见,您可以立即在$args数组中注入上述行。

答案 1 :(得分:1)

您可以获取将'taxonomy' => 'category-declared-into-cpt',添加到$ args的CPT类别。

您必须添加已声明用于创建CPT的分类。

答案 2 :(得分:0)

使用 wp_reset_query(); 重置您的查询并销毁您的查询代码。所以,您的代码如下: wp_reset_query(); while(have_posts()):// bla bla endwhile;

相关问题