问题是我应该将什么值传递给meta_query数组中的value选项?我目前正在尝试传递“ date(“ Y / m / d h:i A”)”(减去引号),因为据我所知,它将今天打印当前日期。我不在乎日期的时间,所以可能无关紧要。最终,我正在尝试使用compare选项来确定显示即将发生的事件,该站点上不同位置的过去事件。在另一个地方,我实际上需要将值选项传递给一个数组,该数组将打印当前月份的第一天和最后一天,从而将输出限制为该月发生的事件。
<?php
query_posts( array(
'post_type' => 'event', // only query events
'meta_key' => 'event_date', // load up the event_date meta
'orderby' => 'meta_value', // sort by the event_date
'order' => 'asc', // ascending, so earlier events first
'posts_per_page' => '2',
'meta_query' => array( // restrict posts based on meta values
'key' => 'event_date', // which meta to query
'value' => date("Y/m/d h:i A"), // value for comparison
'compare' => '>=', // method of comparison
'type' => 'DATE' // datatype, we don't want to compare the string values
) // end meta_query array
) // end array
); // close query_posts call
?>
#1 楼
我结束了完全相同的工作,这篇文章非常有帮助。我使用了“自定义字段”,这是我用来创建大于当前日期的所有事件的列表的代码。请注意基于分类法的额外过滤器。<?php // Let's get the data we need to loop through below
$events = new WP_Query(
array(
'post_type' => 'event', // Tell WordPress which post type we want
'orderby' => 'meta_value', // We want to organize the events by date
'meta_key' => 'event-start-date', // Grab the "start date" field created via "More Fields" plugin (stored in YYYY-MM-DD format)
'order' => 'ASC', // ASC is the other option
'posts_per_page' => '-1', // Let's show them all.
'meta_query' => array( // WordPress has all the results, now, return only the events after today's date
array(
'key' => 'event-start-date', // Check the start date field
'value' => date("Y-m-d"), // Set today's date (note the similar format)
'compare' => '>=', // Return the ones greater than today's date
'type' => 'DATE' // Let WordPress know we're working with date
)
),
'tax_query' => array( // Return only concerts (event-types) and events where "songs-of-ascent" is performing
array(
'taxonomy' => 'event-types',
'field' => 'slug',
'terms' => 'concert',
),
array(
'taxonomy' => 'speakers',
'field' => 'slug',
'terms' => 'songs-of-ascent',
)
)
)
);
?>
#2 楼
首先,这很大程度上取决于您的日期如何存储在元值中。通常,将日期作为MySQL日期/时间戳存储在MySQL中是一个好主意。MySQL时间戳具有
Y-m-d h:i:s
的格式。使用WP自己的日期处理功能。因此,要以MySQL格式获取当前日期,请使用current_time('mysql')
。要格式化要显示的MySQL日期,请使用
mysql2date($format, $mysql_date)
。在设置中,请使用$format = get_option('date_format');
。要存储用户选择的日期,您必须将其转换为MySQL日期。这样做,最简单但不是最安全的方法是date('Y-m-d h:i:s', $unix_timestamp);
。 $unix_timestamp
通常可以通过strtotime($user_input)
派生。月范围,这是我用来获取任何MySQL时间戳的月范围的函数:具有一个用于该函数的函数:
strtotime()
,该函数也将边界作为数组传递。评论
您不是说“ MySQL时间戳的格式为Y-m-d G:i:s”吗? G:i:s是24小时,h:i:s是12小时。
– admcfajn
18年8月11日在1:27
#3 楼
我总结了以下内容。我设置了一个事件移动字段并从那里进行比较。感谢您的帮助<?php
$event_query = new WP_Query(
array(
'post_type' => 'event', // only query events
'meta_key' => 'event-month', // load up the event_date meta
'order_by' => 'event_date',
'order' => 'asc', // ascending, so earlier events first
'meta_query' => array(
array( // restrict posts based on meta values
'key' => 'event-month', // which meta to query
'value' => date("n"), // value for comparison
'compare' => '=', // method of comparison
'type' => 'NUMERIC' // datatype, we don't want to compare the string values
) // meta_query is an array of query ites
) // end meta_query array
) // end array
); // close WP_Query constructor call
?>
<?php while($event_query->have_posts()): $event_query->the_post(); //loop for events ?>
#4 楼
您好,以下是我发布的解决方案。我以Y-m-d H:i
格式存储日期的地方(例如2013-07-31 16:45)。根据事件开始日期排序。
仅在
meta_query
处才会查询今天之后结束的事件。 $args = array(
'posts_per_page' => 3,
'orderby' => 'meta_value',
'meta_key' => 'event_start_date_time',
'order' => 'ASC',
'post_type' => 'events',
'meta_query' => array(
array(
'key' => 'event_end_date_time',
'value' => date("Y-m-d H:i"),
'compare' => '>=',
'type' => 'DATE'
)
)
);
query_posts( $args );
if( have_posts() ) : while ( have_posts() ) : the_post();
评论
为什么不'type'=>'DATE'?
–弗朗西斯科·科拉莱斯·莫拉莱斯(Francisco Corrales Morales)
15年2月23日在23:18
我可以肯定@FranciscoCorralesMorales的疑问:您必须指定“ DATE”类型,尤其是因为日期元字段没有保存为数字,而是以“ Y-m-d”的形式保存(请注意连字符)。我已经编辑了乔纳森的答案。
–马可·帕尼奇(Marco Panichi)
17年2月17日在13:39
为了进行国际化,您可能需要使用WordPress函数date_i18n()而不是php本机date()。
–杰克
17年9月1日于22:02