嘿Stackexchange上的所有人!
我正试图找到一种方法,根据循环中的类别(按日期排序)对帖子进行优先级排序。所有员额都按各自的日期分组。日期标签在相同日期的帖子顶部显示一次,如下所示:
日期
邮政1号邮政2号邮政3号邮政之前的日期
第4后第5后等
我正在努力实现这样一个结果,即如果一个帖子属于某个预先确定的类别(我只会使用一个类别),那么它将在某个日期下移动到其他帖子之上:
日期
邮政3号(特殊类别)邮政1号
我对这个话题做了一段时间的研究,我不知道这是否可能。有些查询函数似乎也有类似的用途,但我不确定,而且日期排序使其更难理解。我需要多个循环或类似的东西吗?
我的循环:http://pastebin.com/Pp0rA5j7
循环和排序机制通常如下所示(pastebin表示完整代码):
<?php $w_h = $w_d = $last = 0; ?>
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
<?php
if ( date(\'Yz\') == get_the_time(\'Yz\') ) {
if (!$w_d++) echo \'<h6>Today</h6>\';
} elseif ( date(\'Yz\')-1 == get_the_time(\'Yz\') ) {
if (!$w_h++) echo \'<h6>Yesterday</h6>\';
} else {
echo the_date(\'\', \'<h3>\', \'</h3>\');
}; ?>
// post content
<?php endwhile; ?>
<?php endif; ?>
<?php else : ?>
示例站点:
http://goldenred.web44.net (我想在2013年2月3日将“测试”类别的后测试6移到其他类别之上)
如果有任何更有经验的人能帮助我,或者至少能为我指明一个大致的方向,我将不胜感激。欢迎所有评论。
SO网友:Max Yudin
也许这是个坏主意,但这是唯一的。
不要立即打印帖子,而是将其收集到不同的变量中:一个用于类别“测试”,另一个用于其他变量。
<?php
$w_h = $w_d = $last = 0;
// init variables to concatenate content later
$primary_posts = $secondary_posts = \'\';
// empty array to fill later
$category_names = array();
if (have_posts()) :
while (have_posts()) :
the_post();
if ( date(\'Yz\') == get_the_time(\'Yz\') ) {
if (!$w_d++) echo \'<h6>Today</h6>\';
} elseif ( date(\'Yz\')-1 == get_the_time(\'Yz\') ) {
if (!$w_h++) echo \'<h6>Yesterday</h6>\';
} else {
echo the_date(\'\', \'<h3>\', \'</h3>\');
};
// get post categories
$category_objects = get_the_category();
foreach($category_objects as $category_object) {
$category_names[] = $category_object->name;
}
// if posts belongs to category \'test\'
if( in_array(\'test\', $category_names) ) {
$primary_posts .= \'<div class="post">Post of category "test"\';
// title, categories and excerpt goes here
$primary_posts .= \'</div><!-- .post -->\';
}
else {
$secondary_posts .= \'<div class="post">Post of category other than "test"\';
// title, categories and excerpt goes here
$secondary_posts .= \'</div><!-- .post -->\';
}
endwhile;
// output all posts of category "test"
echo $primary_posts;
// output all posts of category other than "test"
echo $secondary_posts;
endif;