Custom taxonomy template loop

时间:2014-08-06 作者:hambos22

我知道这个问题问得很多,但我找不到一个适合我的答案。

我制作了一些自定义帖子类型和一些自定义分类法。我有自定义的帖子类型Products 并与分类法相联系Product Categories. 当用户在产品页面上单击产品类别时,我想向他显示该特定类别中的所有产品。

问题是,产品类别将约为50种。现在我发现的唯一一件事就是把这个

<?php $loop = new WP_Query( array( \'post_type\' => \'all_products\', \'posts_per_page\' => 12, \'products\' => \'advance\' ) ); ?>
但这只显示了高级类别的帖子。我需要一种方法来自动获取用户单击的类别。肮脏的方法是赚50英镑taxonomy-{slug}.php 文件。但我想要干净的方式。我似乎找不到它。

我阅读了所有关于模板层次结构和定制分类法的法典,搜索了半个stackexchange,但什么都没有搜索到(可能我遗漏了一些东西:P)。

我试图尽可能清楚地描述我的问题。如果你听不懂,请告诉我,我会尝试用更多信息更新问题。

非常感谢。

3 个回复
最合适的回答,由SO网友:Pieter Goosen 整理而成

我理解你这个问题的方式是,无论当前显示的术语是什么,在这个分类法中,每页都需要12篇文章。

这很容易用pre_get_posts. 绝不应更改存档页上自定义查询的主查询。阅读this answer 我最近对这个问题做了一些研究。

使用is_tax() 有条件以分类法页面为目标并查看参数

将此添加到函数。php。您也只能使用一种分类法。php适用于所有术语,无需另外制作50个

function custom_ppp( $query ) {
    if ( !is_admin() && $query->is_tax() && $query->is_main_query() ) {
        $query->set( \'posts_per_page\', \'12\' );
    }
}
add_action( \'pre_get_posts\', \'custom_ppp\' );

EDIT

在分类学中。php,更改此

<?php $loop = new WP_Query( array( \'post_type\' => \'all_products\', \'pre_get_posts\' => 12, \'products\' => \'advance\' ) ); ?> 

<?php while ( $loop->have_posts() ) : $loop->the_post(); ?> 
    //content 
<?php endwhile; ?>
回到这里

<?php while ( have_posts() ) : the_post(); ?> 
   //content
<?php endwhile; ?>

SO网友:Rarst

您所描述的内容与“分面搜索”有着松散的联系,但您并没有完全进行搜索。:)

简而言之,您需要:

将有关“选定”分类法的信息传达给页面,这可以通过GET query或rewrite endpoint

  • 相应地生成链接(或您拥有的任何界面)
  • 调整主查询(!)通过pre_get_posts, 更改模板中的查询很可能会遇到分页问题

  • SO网友:Aamer Shahzad

    这就是我用的Custom Post Type healthCustom Taxonomy health-category 还修复了分页。

    <?php
    $paged = ( get_query_var(\'paged\') ) ? get_query_var(\'paged\') : 1;
    $q = new WP_Query([
        \'post_type\' => \'product\',
        \'posts_per_page\' => get_option(\'posts_per_page\'),
         get_query_var( \'taxonomy\' ) => get_query_var( \'term\' ),
        \'paged\' => $paged
    ]);
    $temp_query = $wp_query;
    $wp_query = null;
    $wp_query = $q;
    
    if ( $q->have_posts() ) :
        while ( $q->have_posts() ) : $q->the_post();
    
            // post content goes here..
    
        endwhile;
    endif;
    
    // Reset postdata
    wp_reset_postdata();
    
    // pagination goes here..
    
    // Reset main query object
    $wp_query = NULL;
    $wp_query = $temp_query;
    ?>
    

    结束

    相关推荐

    Nested WP_Query breaking loop

    我正在使用WP_Query 获取没有子页面的所有页面。对于我再次使用的每个页面WP_Query 获取第一个循环中当前页的所有子页。这一切都很好,我得到了预期的结果。但是现在使用第三个WP_Query 在其中一个子页面上,第二级循环中断。我已经试过了wp_reset_query() 和wp_reset_postdata() 但他们没有做到这一点。我还试图挽救global $wp_query 和global $post 并在循环后重置它们,但这也没有帮助。如何在WP中实现嵌套查询?Edit 根据要求(以及它的