我在for循环中使用Wordpress中的以下自定义查询,这使我能够为我为“新闻”创建的自定义帖子类型的前8个月创建选项卡式存档。
这完美无缺,但我希望在“旧消息”标题下显示每个旧帖子。我正在努力弄清楚如何在任何时候将当前日期超过8个月的帖子分开。
任何人都可以告诉我一个可以让我这样做的自定义查询结构。
以下是我用于在相关容器中输出CPT的代码。
<?php for($i = $this_month-1; $i > $this_month-8; $i--) :
if($i==-1){$m=11;}
if($i==-2){$m=10;}
if($i==-3){$m=9;}
if($i==-4){$m=8;}
if($i==-5){$m=7;}
if($i==-6){$m=6;}
if($i==-7){$m=5;}
if($i==-8){$m=4;}
else{$m=$i;}
query_posts( array(
'post_type' => 'news',
'posts_per_page' => '-1',
'orderby' => 'date',
'order' => 'ASC',
'monthnum'=>$m
) );
.......
答案 0 :(得分:2)
你可以试试这个
<?php
add_filter('posts_where', 'filter_where');
query_posts( array('post_type' => 'news', 'posts_per_page' => '-1', 'orderby' => 'date'));
function filter_where($where = ''){
$where .= " AND post_date < '".date('Y-m-d', strtotime('-8 month'))."'";
return $where;
}
remove_filter('posts_where', 'filter_where');
if (have_posts()) :
while (have_posts()) : the_post();
// your code
endwhile;
endif;
wp_reset_query();
?>
更新:可能会对您有所帮助。
$args = array(
'post_type' => 'news',
'posts_per_page' => '-1',
'orderby' => 'date',
'year' => date('Y'), // for current year, date('Y')-1 for 1 year ago
'monthnum' => $m, // the month in the loop
'order' => 'ASC'
);
query_posts( $args );
答案 1 :(得分:0)
我不太了解wordpress,但可以在逻辑上帮助你。据我所知,这可以通过检查查询中的“WHERE creation_date&lt; 8 months”之类的条件来完成,同时重新查找类别“旧消息”的帖子。所以首先得到当前日期。
<?php $today = date('Y-m-d'); ?>
然后从中减去8个月,你会得到一个8个月大的日期
<?php $eight_month = date('Y-m-d',strtotime("-8 month $today")); ?>
现在您可以在查询中使用$ eight_month,这样您的查询就会是这样的。检查您存储在数据库中的日期格式以便发布,如果格式与“Y-m-d”不同,则相应地更改我的
“SELECT * FROM帖子WHERE creation_date&lt;'$ eight_month'”
希望这是您想要的并帮助您完成项目。祝你好运,度过愉快的一天