显示所有类别中的所有帖子并进行分页

时间:2014-09-15 作者:coldpumpkin

好吧,这可能是一个棘手的解释,但我会尽我最大的努力。

在首页,我想显示所有类别的所有帖子。但我希望他们分开。以此为例:

enter image description here

年份实际上是类别。每个类别代表不同的年份。因此,我将我的帖子(只在循环中显示缩略图)插入到适用于照片拍摄时的类别中。

在每个类别的开头,我希望它显示类别的名称,如上所示。我还使用了Paul Irish提供的jQuery无限滚动,因此基本上分页按钮被加载栏取代,当用户向下滚动时,它只在同一页面加载。

我当前的代码是:

<div class="post clear">
    <a href="<?php echo get_category_link(4); ?>"><div class="date"><?php echo get_cat_name(4); ?></div></a>
    <?php
    $catPost = get_posts(\'cat=4&posts_per_page=-1\');
    foreach ($catPost as $post) : setup_postdata($post); ?>
        <?php get_template_part(\'content\'); ?>
    <?php endforeach;?>
</div>
<div class="post clear">
    <a href="<?php echo get_category_link(1); ?>"><div class="date"><?php echo get_cat_name(1); ?></div></a>
    <?php
    $catPost = get_posts(\'cat=1&posts_per_page=-1\');
    foreach ($catPost as $post) : setup_postdata($post); ?>
        <?php get_template_part(\'content\'); ?>
    <?php endforeach;?>
</div>
而且它确实起作用了。嗯,差不多了。首先,每次创建一个新的类别时,我都必须逐个类别插入,其中大部分代码都是重复的。唯一需要更改的是类别的ID。如果只使用一个代码,我就可以按照我想要的方式检索所有类别,那会更好。

另外,另一个问题是分页不起作用。如果我向下滚动(或禁用无限滚动并单击第二页),它只会一遍又一遍地显示重复的内容。

我想你们都明白了。我希望用户能够浏览我的图库,每当弹出一组不同年份的新照片时,日期将出现在第一张图像上。我提出了这个类别的解决方案,但要让它按我想要的方式工作变得有点困难。

有什么解决方案/建议吗?

提前感谢!

EDIT @最佳程序Merintheworld

<?php
    $args=array(
      \'posts_per_page\' => -1,
      \'orderby\' => array( \'date\' => \'DESC\', \'title\' => \'ASC\' ),  //This works in WP4.0!!!     
      \'caller_get_posts\'=> 1
    );
    $my_query = new WP_Query($args);


    if( $my_query->have_posts() ) {
      $nr_datesyear = 0;
      while ($my_query->have_posts()) : $my_query->the_post();

        $year = get_the_date(\'Y\');


        if ($year !== $yeargroup && $nr_datesyear <=5) {
            $nr_datesyear = 0;  
            echo \'<div class="post clear">\';
        }
        echo \'<a href="\'. $year .\'"><span class="date">\'. $year .\'</span></a>\';                  
        get_template_part(\'content\');

        if ($year !== $yeargroup && $nr_datesyear <=5) {
            echo \'<div>\'; //end post year group
            $yeargroup = $year;   
        }

        $nr_datesyear++;  
            endwhile;            
        }

        wp_reset_query();
?>

2 个回复
SO网友:HU ist Sebastian

为了能够按类别排序,您必须拦截MySQL查询。

从pre\\u get\\u帖子开始:

add_action(\'pre_get_posts\',\'setup_my_query_interception\');

function setup_my_query_interception($query){
    if(!is_admin() && $query->is_home() && $query->is_main_query()){
     add_filter( \'posts_clauses\', \'order_by_category_intercept_query_clauses\', 20, 1 );
  }
}
现在,我们增强了MySQL查询,以包括术语表和分类表:

function order_by_category_intercept_query_clauses($pieces){
        global $wpdb;
        $pieces[\'join\'].=" LEFT JOIN $wpdb->term_relationships trt ON ($wpdb->posts.ID = trt.object_id) LEFT JOIN $wpdb->term_taxonomy ttt ON (trt.term_taxonomy_id = ttt.term_taxonomy_id) INNER JOIN $wpdb->terms termts ON (termts.term_id = ttt.term_id)";
        $pieces[\'where\'].=" AND ttt.taxonomy = \'category\'";
        $pieces[\'orderby\']="termts.name ASC, ".$pieces[\'orderby\'];
        //Remove the filter so it only runs once in our main query
        remove_filter(\'posts_clauses\', \'order_by_category_intercept_query_clauses\');
        return $pieces;
}
这将导致主查询首先按类别名称排序(分页仍然有效)。执行循环时,可以按如下方式对类别进行分组:

。。。循环之前:

global $activetax;
$activetax = "";
echo \'<div class="mywrapper">
。。。在循环中:

$cats = get_the_terms(get_the_ID(),\'category\');
if(is_array($cats)){
    if(!($activetax==$cats[0]->name)){
            $activetax = $cats[0]->name;
            ?>
            </div>
            <h2 id="tax_id_<?php echo $cats[0]->term_id; ?>" class="cat-header"><?php echo $activetax; ?></h2>
            <div class="mywrapper">
            <?php
    }
}
get_template_part(\'content\'); 
。。。循环之后

echo "</div>";
没有测试它,但应该可以工作;)

快乐的编码。

SO网友:dalveer

您还可以将此代码用于显示类别和帖子(如果您使用WordPress的默认类别和帖子

<?php 
        $terms = get_terms( \'category\', array(
        \'hide_empty\' => false,
        \'order_by\' => \'name\',
        \'order\' => \'ASC\',
        \'number\' => 100,
        \'taxonomy\' => \'category\'
    ) );

         //print_r($terms);

         foreach($terms as  $termss)
        {
        //echo "<br/>";
         //echo $termss->term_id;
            //echo "<br/>";
            ?>
        <h1> <?php echo $termss->name; ?></h1>
         <?php 
            //echo "<br/>";
          //echo $termss->slug;


           $query =  query_posts("category_name=\'$termss->name\'&showposts=5");
        //print_r($query);
        foreach($query as  $querys)
        {
        //$querys->ID;
        ?>
        <h3><?php echo $querys->post_title; ?></h3>

        <p><?php echo $querys->post_content; ?></p>

    <?php   //echo "<br/>";
        }


        }
         ?>

结束

相关推荐

Get all categories

我正在尝试为我的自定义帖子类型创建一个所有类别的列表。对于每个类别,我想创建一个类别名称链接。有谁能在这方面帮助我吗?