如何使存档页面显示日期范围内的帖子

时间:2015-02-17 作者:dbj

我正在尝试为不同的页面制作两个页面模板,这些页面应作为存档,以显示特定日期范围内的帖子(实际上是自定义帖子类型)。

它关注的网站是http://memstories.com CPT是“事件”。我已经发现一些关于WP支持的线程的提及(https://wordpress.org/support/topic/show-the-posts-published-before-a-specific-date?replies=2#post-1066144), 但我无法让它发挥作用:

<?php
function filter_where($where = \'\') {
$where .= " AND post_date >= \'1900-01-01\' AND post_date <= \'1949-12-31\'";
return $where;
}
add_filter(\'posts_where\', \'filter_where\');
query_posts($query_string);
?>
因为这个网站上的事件帖子都是历史事件,所以我使用发布日期作为历史事件发生的实际日期,我要追溯到1900年。在上面的查询中,我试图完成一个适合20世纪上半叶(1900-1949)日期范围的帖子列表,但无论我怎么尝试都是失败的。

我真的没有其他地方可以找到更多信息,事实上,stackexchange上所有类似的问题都是通过指向同一个线程的链接来回答的(5年前!)在Wordpress支持上。

有人知道怎么解决这个问题吗?

2 个回复
最合适的回答,由SO网友:Milo 整理而成

在post meta中保存日期是一种稍微理智一点的方法post_date 列的设计并没有考虑到您的用例。在Unix时代之前(1970年1月1日),您可能会得到奇怪的结果。那么这只是一个简单的meta_query 要在日期之间加载帖子,无需筛选。

$start = \'1900-01-01\';
$end = \'1949-12-31\';
$args = array(
    \'post_type\' => \'events\',
    \'posts_per_page\' => -1,
    \'orderby\' => \'meta_value\',
    \'order\' => \'ASC\',
    \'meta_key\' => \'_event_date\',
    \'meta_query\' => array(
        array(
            \'key\' => \'_event_date\',
            \'value\' => array( $start, $end ),
            \'compare\' => \'BETWEEN\',
            \'type\' => \'DATE\'
        )
    )
);
$events_query = new WP_query( $args );

SO网友:Sean Grant

嗯,WP可能正在抑制您的过滤器。

根据WP Codex发布的帖子,其中@:http://codex.wordpress.org/Plugin_API/Filter_Reference/posts_where

某些检索帖子的函数不运行过滤器,因此您附加的posts\\u过滤器函数不会修改查询。要解决此问题,请在传递给函数的参数数组中将suppress\\u filters设置为false。

这是他们参考的代码:

//get posts AND make sure filters are NOT suppressed
$posts = get_posts( array( \'suppress_filters\' => FALSE ) );
您是否在get\\u posts()调用中使用此选项?

结束
如何使存档页面显示日期范围内的帖子 - 小码农CODE - 行之有效找到问题解决它

如何使存档页面显示日期范围内的帖子

时间:2015-02-17 作者:dbj

我正在尝试为不同的页面制作两个页面模板,这些页面应作为存档,以显示特定日期范围内的帖子(实际上是自定义帖子类型)。

它关注的网站是http://memstories.com CPT是“事件”。我已经发现一些关于WP支持的线程的提及(https://wordpress.org/support/topic/show-the-posts-published-before-a-specific-date?replies=2#post-1066144), 但我无法让它发挥作用:

<?php
function filter_where($where = \'\') {
$where .= " AND post_date >= \'1900-01-01\' AND post_date <= \'1949-12-31\'";
return $where;
}
add_filter(\'posts_where\', \'filter_where\');
query_posts($query_string);
?>
因为这个网站上的事件帖子都是历史事件,所以我使用发布日期作为历史事件发生的实际日期,我要追溯到1900年。在上面的查询中,我试图完成一个适合20世纪上半叶(1900-1949)日期范围的帖子列表,但无论我怎么尝试都是失败的。

我真的没有其他地方可以找到更多信息,事实上,stackexchange上所有类似的问题都是通过指向同一个线程的链接来回答的(5年前!)在Wordpress支持上。

有人知道怎么解决这个问题吗?

2 个回复
最合适的回答,由SO网友:Milo 整理而成

在post meta中保存日期是一种稍微理智一点的方法post_date 列的设计并没有考虑到您的用例。在Unix时代之前(1970年1月1日),您可能会得到奇怪的结果。那么这只是一个简单的meta_query 要在日期之间加载帖子,无需筛选。

$start = \'1900-01-01\';
$end = \'1949-12-31\';
$args = array(
    \'post_type\' => \'events\',
    \'posts_per_page\' => -1,
    \'orderby\' => \'meta_value\',
    \'order\' => \'ASC\',
    \'meta_key\' => \'_event_date\',
    \'meta_query\' => array(
        array(
            \'key\' => \'_event_date\',
            \'value\' => array( $start, $end ),
            \'compare\' => \'BETWEEN\',
            \'type\' => \'DATE\'
        )
    )
);
$events_query = new WP_query( $args );

SO网友:Sean Grant

嗯,WP可能正在抑制您的过滤器。

根据WP Codex发布的帖子,其中@:http://codex.wordpress.org/Plugin_API/Filter_Reference/posts_where

某些检索帖子的函数不运行过滤器,因此您附加的posts\\u过滤器函数不会修改查询。要解决此问题,请在传递给函数的参数数组中将suppress\\u filters设置为false。

这是他们参考的代码:

//get posts AND make sure filters are NOT suppressed
$posts = get_posts( array( \'suppress_filters\' => FALSE ) );
您是否在get\\u posts()调用中使用此选项?

相关推荐

如何通过jQuery Datepicker搜索帖子?

我正在WordPress网站上工作,我有自己的搜索筛选页面,在那里我添加了jquery日期选择器,现在我想按日期选择器搜索帖子?Html Codescript> $(function() { jQuery( \"#datepicker-13\" ).datepicker({ dateFormat : \"yy-mm-dd\" }); $(\"#datepicker-13\").datepicker().datepick