事件Espresso查询修改?

时间:2016-12-10 03:59:05

标签: wordpress events plugins

我正在使用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 关键字 - 输入

在提交时,将提交这些值,并根据这些值,我将获得与这些值相关的过滤事件。

那么如何实现呢? 请帮忙。 在此先感谢

1 个答案:

答案 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;
&#13;
&#13;

这将为循环中的每个帖子提供meta作为变量,但您可能希望将它们拉入pre_get_posts。您可以轻松创建$ events数组,然后使用变量对其进行过滤。

我不确定您对关键字的确切需求。你的意思是标签吗?标题关键字?说明搜索?为了为它编写函数,您需要准确缩小您需要执行的操作。