如何在可湿性粉剂内搜索两个设定日期之间的事件?

时间:2011-11-28 作者:Sosthenes Kwame Boame

我正在建立一个具有事件功能的WP站点。“事件”页面是使用自定义帖子类型创建的。

我想让人们能够按日期搜索/过滤事件。例如,他们可以搜索2011年12月2日至2012年3月1日之间发生的所有事件,并从日期介于12月和3月(即12月、1月、2月和3月)之间的事件中获取结果。

我想知道最好的方法。有什么想法吗?

通过查看此页面上的“按日期搜索事件”功能,您可以看到我想要实现的一个示例http://www.londontown.com/events

如果不可能,我有没有办法让他们搜索特定月份之间发生的事件,比如12月和2月(不包括白天)?

提前谢谢。

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

要做到这一点,你需要做两件事:

1) 为每个事件的数据创建元数据

2) 使用meta\\u Query查询帖子

对于#1,需要添加允许用户添加事件日期的元框。应使用add_post_metaupdate_post_meta. 如果您不熟悉如何添加元数据,我鼓励您阅读有关添加元数据的内容:

http://codex.wordpress.org/Function_Reference/add_meta_boxhttp://www.wproots.com/complex-meta-boxes-in-wordpress/

对于#2,假设您已经以可排序的方式保存了日期值(例如YYYY-MM-DD),您可以在WP\\U查询的新实例中使用的meta\\u查询参数来获取适当的日期范围。此方法假定您的meta\\u键为“\\u my-datetime-from”。例如,您可以在2011年10月和11月获得以下帖子:

// Set arguments for events
$start = \'2011-11-31\';
$end = \'2011-10-01\';
$args = array(
    \'post_type\' => \'my-event-type\',
    \'posts_per_page\' => -1,
    \'orderby\' => \'meta_value\',
    \'order\' => \'ASC\',
    \'meta_key\' => \'_my-datetime-from\',
    \'meta_query\' => array(
        array(
            \'key\' => \'_my-datetime-from\',
            \'value\' => array($start, $end),
            \'compare\' => \'BETWEEN\',
            \'type\' => \'DATE\'
        )
    )
);
// Make the query
$events_query = new WP_query();
$events_query->query($args);

SO网友:Anh Tran

如何存储事件日期:使用默认值post_date 文章的字段还是自定义元字段?

如果使用默认值post_date, 您可以使用过滤器posts_where 要添加搜索条件,请执行以下操作:

// Create a new filtering function that will add our where clause to the query
function filter_where( $where = \'\' ) {
    // posts for March 1 to March 15, 2010
    $where .= " AND post_date >= \'2010-03-01\' AND post_date < \'2010-03-16\'";
    return $where;
}

add_filter( \'posts_where\', \'filter_where\' );
$query = new WP_Query( $query_string );
remove_filter( \'posts_where\', \'filter_where\' );
有关更多示例,请查看Codex.

如果使用自定义字段,我想您必须编写自己的自定义MySQL查询。这有点复杂。下面是一个示例:

global $wpdb;
$post_ids = $wpdb->get_col( "
    SELECT ID FROM {$wpdb->posts}
    JOIN {$wpdb->postmeta}
    WHERE ID=post_id
    AND meta_key=\'your_custom_meta_key\'
    AND meta_value >= \'2010-03-01\'
    AND meta_value < \'2010-03-16\'
" );

foreach ( $post_ids as $post_id ) {
    $post = get_post( $post_id );
    // Do something
}
wp_reset_postdata();

结束

相关推荐

使用jQuery表单插件的前端提交表单

也许有人能帮我解决一个小问题。我正在尝试使用这个:http://jquery.malsup.com/form/ 为Wordpress创建提交表单。我已经在一个常规的网站(不是WP)上测试过了,它很有效。我不明白为什么它在wp中不起作用。这是我的表格。我已经创建了两个页面模板,一个是表单,另一个是wp\\u insert\\u post code。如果我将表单action更改为action=”http://mysite.com/page.php“它可以工作,如果我将它指向一个页面模板,它就不能工作。我需要它