我正在使用Event Espresso和WordPress。 你可以帮我进一步修改查询吗? 希望你会:)
我想使用meta_query列出页面上的事件。 有点像下面的代码。
$atts = array(
'title' => NULL,
'limit' => 10,
'css_class' => NULL,
'show_expired' => FALSE,
'month' => NULL,
'category_slug' => NULL,
'order_by' => 'start_date',
//'order_by' => 'end_date',
'sort' => 'DESC',
'meta_query' => array(
array(
'key' => 'start_date',
'value' => '2017-01-08 08:00:00',
'type' => 'DATETIME',
'compare' => '>=',
),
)
);
我想为Event Espresso实现搜索功能,我有以下字段: 州 - 下拉(如何列出所有州?可能是地点) 类别 - 下拉列表 开始日期 - Datepicker 结束日期 - Datepicker 关键字 - 输入
在提交时,将提交这些值,并根据这些值,我将获得与这些值相关的过滤事件。
那么如何实现呢? 请帮忙。 在此先感谢
答案 0 :(得分:1)
稍微延迟回应...
首先,这取决于您正在使用的EE版本。它们同时支持EE3和EE4。我使用EE4,因此对我所编写的代码的任何引用都特定于版本4。
要创建具有过滤功能的事件存档,您需要使用EE事件存档。 EE使用自定义数据库表和许多不同的帖子类型来实现您所看到的,因此使用这些过滤器创建一个简单的存档将无法正常工作。 _posts和_postmeta表中存储的内容非常少,您需要从相关的帖子类型和表格中获取post-meta,这些类型和表格不像WP_Query那样布局。他们有一个事件列表的短代码,laid out here并且有许多您正在寻找的过滤器,但没有搜索功能。
他们的支持论坛有很多片段,由他们的工作人员创建,并且有关于格式化事件存档页面here的(长)相关帖子。您还需要通过this documentation查看他们的自定义方法和挂钩。
您可以复制并修改他们在子主题中描述的存档模板,以将搜索功能添加到页面顶部。这将允许您直接覆盖存档。您需要使用一些非常清晰的过滤器,over on WPMU Dev。
您正在寻找过滤的信息在这里,减去关键字:
<?php
if( have_posts() ){
while ( have_posts() ){ the_post(); // enter the WordPress loop
$id = get_the_ID(); // get the ID of the current post in the loop, post ID = EVT_ID
$terms = get_the_terms( $id, 'espresso_event_categories' ); // get the event categories for the current post
if ( $terms && ! is_wp_error( $terms ) ) {
$cats = array();
foreach ( $terms as $term ) {
// do something
}
}
$event = EEM_Event::instance()->get_one_by_ID( $id ); // get the event OBJECT using EE's existing method
$venue = $event->venue(); // get the venue object for the current event
$state = $venue instanceof EE_Venue ? $venue->state_abbrev(); // get the event venue's state, but you can use state_name() to get the full name
// using the event to get the first and last date for the entire event. Sub $datetime for $event to do it per datetime
$start_date = $event->start_date('j M Y');
$end_date = $event->end_date('j M Y');
$start_time = $event->start_time(get_option('time_format'));
$end_time = $event->end_time(get_option('time_format'));
?>
<!-- Do some awesome layout stuff here -->
<?php
}
}
espresso_pagination();
?>
&#13;
这将为循环中的每个帖子提供meta作为变量,但您可能希望将它们拉入pre_get_posts。您可以轻松创建$ events数组,然后使用变量对其进行过滤。
我不确定您对关键字的确切需求。你的意思是标签吗?标题关键字?说明搜索?为了为它编写函数,您需要准确缩小您需要执行的操作。