我正在尝试在Wordpress中显示日期等于或大于今天的帖子列表 – 目的是列出即将发生的事件.
这是我现在的代码:
// Get the current date
$current_date = date('M d, Y');
$current_date = strtotime( $current_date );
// Get the event date
$post_date = get_the_time('M d, Y');
$post_date = strtotime( $post_date );
query_posts(array('category_name' => 'events',
'meta_query' => array(
array(
'key' => $post_date,
'value'=> $current_date,
'compare'=>'>='
)
),
'showposts' => 4,
'orderby' => 'date',
'order' => ASC));
while (have_posts()) : the_post();
如你所见,我正在抓住当前日期和帖子的日期.我知道这段代码有效,因为我的代码主要采用以下格式:
// Get the current date
$current_date = date('M d, Y');
$current_date = strtotime( $current_date );
query_posts(array('category_name' => 'events',
'showposts' => 4,
'orderby' => 'date',
'order' => ASC));
while (have_posts()) : the_post();
// Get the date
$post_date = get_the_time('M d, Y');
$post_date = strtotime( $post_date );
// If older than current date, don't show it
if( $post_date >= $current_date ):
但问题是它找到帖子,然后将它们与当前日期进行比较.因此,如果我想显示我的10个帖子中的4个,但是因为它们已经过去而隐藏3个帖子,我实际上只在这里显示1个帖子.
我需要与当前日期进行比较,然后显示该计算结果中的4个帖子.
任何帮助是极大的赞赏.谢谢!
最佳答案 为此,您可以使用date_query作为query_posts()调用的一部分(代替meta_query).
这将消除在查询运行后检查帖子日期的需要,因此您应该始终获得您正在寻找的四个.
$today = getdate();
$args = array(
'date_query' => array(
array(
'year' => $today["year"],
'month' => $today["mon"],
'day' => $today["mday"],
'compare' => '>=',
),
),
'posts_per_page' => 4,
'orderby' => 'date',
'order' => ASC
);
query_posts($args);
注意:我强烈建议您查看WP_Query
codex以获取更多信息,因为其中有一些非常有用的参数.这些可以帮助您进一步细化返回的帖子,包括post_type,post_status和cat等.当然,并非所有这些在所有情况下(或者可能在所有情况下)都与您相关,但它仍然值得一读.
警告:请注意,一段时间之前,posts_per_page已替换show_posts.
更新
您在评论中提到上述代码正在运行,但只检索了一个Post.我最初的想法是,这是由两件事之一引起的 –
>你只有一个未来的帖子,因此没有更多要显示.
>有些东西正在挂钩您的查询并更改LIMIT部分.
我建议查看一旦发出就传递给MySQL的查询.为此,请在query_posts($args)下方添加以下行并重新加载您的页面. –
global $wpdb;
echo '<pre>'; print_r($wpdb->last_query); echo '<pre>';