Search by meta_query

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

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

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

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

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

以下是开始和结束日期元框的代码:

$prefix = \'ghes_\';

add_filter( \'ghes_meta_boxes\', \'ghes_sample_metaboxes\' );

function ghes_sample_metaboxes( $meta_boxes ) {

    global $prefix;

    $meta_boxes[] = array(
        \'id\' => \'event_meta\',
        \'title\' => \'Event Metabox\',
        \'pages\' => array(\'event\'), // post type
        \'context\' => \'normal\',
        \'priority\' => \'high\',
        \'show_names\' => true,
        \'fields\' => array(


        array(
                \'name\' => \'Event Start Date\',
                \'desc\' => \'field description (optional)\',
                \'id\' => $prefix . \'event_start_timestamp\',
                \'type\' => \'text_date_timestamp\'
            ),

        array(
                \'name\' => \'Event End Date\',
                \'desc\' => \'field description (optional)\',
                \'id\' => $prefix . \'event_end_timestamp\',
                \'type\' => \'text_date_timestamp\'
            )
以下是日期数据的保存方式:

case \'text_date_timestamp\':
                echo \'<input class="ghes_text_small ghes_datepicker" type="text" name="\', $field[\'id\'], \'" id="\', $field[\'id\'], \'" value="\', $meta ? date( \'m\\/d\\/Y\', $meta ) : $field[\'std\'], \'" /><span class="ghes_metabox_description">\', $field[\'desc\'], \'</span>\';
                break;
这是我的搜索框:

<form action="<?php bloginfo(\'url\'); ?>" method="get" id="searchform" class="form_search">

        Event Search:

        <!-- START Category Search -->
      <select name="event_cat">
            <option value="0">Select...</option>
            <?php
            $theterms = get_terms(\'event_cat\', \'orderby=name\');
            foreach ($theterms AS $term) :
                echo "<option value=\'".$term->slug."\'".($_GET[\'event_cat\'] == $term->slug ? \' selected="selected"\' : \'\').">".$term->name."</option>\\n";
            endforeach;
            ?>
        </select>

        <!-- END Category Search -->
        <!-- START Date Search -->
        <span class="em-events-search-dates">
            <?php _e(\'between\',\'ghes\'); ?>:

<input class="ghes_text_small ghes_datepicker" type="text_date_timestamp" name="ghes_event_start_timestamp" id="ghes_event_start_timestamp" value=""/>\'
            <input type="hidden" id="ghes_event_start_timestamp" name="start" value="" />

            <?php _e(\'and\',\'ghes\'); ?>

<input class="ghes_text_small ghes_datepicker" type="text" name="ghes_event_end_timestamp" id="ghes_event_end_timestamp" value=""/>\'
            <input type="hidden" id="ghes_event_end_timestamp" name="end" value="" />
        </span>
        <!-- END Date Search -->
        <input type="hidden" name="_wpnonce" value="<?php echo wp_create_nonce(\'search_events\'); ?>" />
        <input type="submit" value="<?php _e(\'Search\',\'ghes\'); ?>" class="em-events-search-submit" />       
    </form>
如何让表单处理“日期搜索”数据并在用户选择的日期之间显示结果?

搜索表单是否缺少任何内容?是否有一些我应该添加到函数中的内容。php来实现这一点?

我已经寻找答案将近两周了,我真的很想知道这是怎么回事。如果您对如何实现这一目标有想法,请分享您的想法。

提前谢谢。

1 个回复
SO网友:ferenyl

您应该查看meta\\u查询:

$args = array(
\'meta_query\' => array(
        \'key\' => \'event_start_timestamp\', // the name of the meta
        \'value\' => \'11/21/2011\', // the value to search for
        \'compare\' => \'>=\', //search for start dates bigger or equal to value
    )
); 
$query = new WP_Query( $args );

结束