好吧,这可能是一个棘手的解释,但我会尽我最大的努力。
在首页,我想显示所有类别的所有帖子。但我希望他们分开。以此为例:
年份实际上是类别。每个类别代表不同的年份。因此,我将我的帖子(只在循环中显示缩略图)插入到适用于照片拍摄时的类别中。
在每个类别的开头,我希望它显示类别的名称,如上所示。我还使用了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();
?>
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>";
没有测试它,但应该可以工作;)
快乐的编码。