用于显示距当前日期超过 8 个月的 WordPress 自定义帖子类型的自定义查询
Posted
技术标签:
【中文标题】用于显示距当前日期超过 8 个月的 WordPress 自定义帖子类型的自定义查询【英文标题】:Custom query for displaying WordPress custom post types that are more than 8 months old from current date 【发布时间】:2012-08-16 15:56:22 【问题描述】:我在 Wordpress 中的 for 循环中使用以下自定义查询,使我能够为我为“新闻”创建的自定义帖子类型的前 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
) );
.......
【问题讨论】:
【参考方案1】:你可以试试这个
<?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 );
【讨论】:
感谢您的帮助,效果很好,希望您喜欢您的观点 :) !我现在在上面的问题中使用的代码有点麻烦。它按月列出所有内容,但包括前几年的帖子,我该如何过滤掉这个查询中的旧帖子(超过 8 个月)?再次感谢您 如果您的代码收到超过 8 个月的帖子,那么它可能是在去年。 抱歉,我之前的评论不是很清楚。您回答的问题显示了所有超过 8 个月的新闻,这很棒。另一个问题如下。我在原始问题中包含的自定义查询按月显示所有新闻帖子,但它不会删除超过 8 个月的帖子,例如,如果我在去年 8 月的新闻中有帖子,它会出现在当前的八月列表中。是否有任何自定义查询我可以用来删除这些。 (查询目前处于 for 循环中,因为我需要循环几个月来打印导航菜单 你想按月显示帖子,但只显示当年的帖子吗? 不,我只是想编辑我上面写的查询,以便它只包括过去 8 个月的帖子,目前它只是拉过任何具有相同月份的帖子,所以所有帖子都被拉过以 8 月为例,即使是 2009 年 8 月【参考方案2】:我不太了解 wordpress,但可以在逻辑上为您提供帮助。据我所知,这可以通过在检索“旧新闻”类别的帖子时检查查询中的“WHERE creation_date
<?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 posts WHERE creation_date
希望这是您想要的,并在您的项目中为您提供帮助。祝你好运,祝你有美好的一天
【讨论】:
以上是关于用于显示距当前日期超过 8 个月的 WordPress 自定义帖子类型的自定义查询的主要内容,如果未能解决你的问题,请参考以下文章
js 日期下拉框下拉框内容显示日期YYYYMM,要求范围:系统时间前4个月、后8个月。怎么实现?