您好我试图按活动日期对Workshop活动进行排序? 我可以通过其他meta_key对数据进行排序,如城镇,领导者,国家等。但不是按活动日期。
有meta" country"但因为它们彼此相邻,所以UTC没有区别。
在CBM2功能中,我设置了字段" date"这是元框的一部分 function.php
<!-- language: lang-php -->
$cmb_data->add_field( array(
'name' => __( 'Event Date', 'workshops' ),
'desc' => __( 'Event Date', 'workshops' ),
'id' => $prefix . 'event_date',
'type' => 'text_date',
'date_format' => 'd-m-Y',
) ) ;
这是CPT模板workshop.php
<!-- language: lang-php -->
<section id="" class="">
<div class="">
<?php
$args = array(
'post_type' => 'workshops',
'posts_per_page' => 10,
'meta_key' => 'workshop_data_event_date',
'orderby' => 'meta_value',
'order' => 'DESC'
);
$articles = new WP_Query( $args );
if ( $articles->have_posts() ) : $articles->the_post();
echo '<div class="cptul-stripe-2 article-post__stats">';
foreach ( $articles->posts as $article ) {
// var_dump($article);
echo '<div class="cptli-stripe-2__wrap">
<div class="cptli-stripe-2--header">
<div><span class="name">'
. get_post_meta( $article->ID, 'workshop_data_leader', true )
. '</span>
<span class="nameWhat"> povede workshop</span>
</div>
<a class="stripe-title-mid" href="' . get_permalink( $article->ID ) . '">'
. $article->post_title . '</a>
<ul>
<li id="event-date" class="article-post__event-date"><span
class="article-post__stats-icon">'
. webovkar_get_svg( array( 'icon' => 'calendar' ) ) . '</span>'
. get_post_meta( $article->ID, 'workshop_data_event_date', true ) .
'</li><li class="article-post__event-town"><span class="article-post__stats-icon"> '
. webovkar_get_svg( array( 'icon' => 'mmarker' ) ) . '</span>'
. get_post_meta( $article->ID, 'workshop_data_town', true ) . ' | '
. get_post_meta( $article->ID, 'workshop_data_country', true ) .
'</li></ul> </div>
<div class="cptli-stripe-2--data">'
. apply_filters( 'the_content', get_post_meta( $article->ID, 'workshop_data_excerpt',
true ) ) .
'</div>
</div>';
}
echo '</div>';
endif; ?>
<?php wp_reset_postdata(); ?>
</div>
</section>
答案 0 :(得分:0)
我不记得CMB2如何在数据库中存储日期字段,但您可以使用WP_Query
的高级meta_query
选项将自定义字段的类型指定为日期。
来自the docs(强调我的):
meta_query还包含一个或多个具有以下键的数组:
- key(string) - 自定义字段键。
- value(string | array) - 自定义字段值。 [...]
- compare(string) - 要测试的运算符。 [...]
- type(string) - 自定义字段类型。可能的值为'NUMERIC','BINARY','CHAR','DATE','DATETIME','DECIMAL','SIGNED','TIME', 'UNSIGNED'。默认值为“CHAR”。您还可以指定精度 和'DECIMAL'和'NUMERIC'类型的比例(例如, 'DECIMAL(10,5)'或'NUMERIC(10)'有效。
只有当日期以YYYY-MM-DD格式存储并使用此格式进行测试时,'type'DATE才能使用'compare'值BETWEEN。
如果您的日期存储为Unix时间戳,请在数字上与它们进行比较。如果它们存储为日期值,请使用DATE
或DATETIME
。
答案 1 :(得分:0)
在使用代码后,我找到了适用于我的解决方案,但我不知道它是否是正确的代码风格。我不得不搬到时间戳地,以使其发挥作用。
$args = array(
'post_type' => 'workshops',
'meta_query' => array(
array(
'key' => 'workshop_data_event_date',
'value' => current_time('timestamp'),
'compare' => '>'
)
),
'meta_type' => 'text_date_timestamp',
'orderby' => 'meta_value_num',
'order' => 'DESC'
);
在foreach
循环中
$datum = get_post_meta( $article->ID, 'workshop_data_event_date', true );
我使用date()
通过回显
date('d-m-Y', $datum)
编辑:因为我需要在头版上显示将在未来30天内发生的事件,所以我已将此查询添加到首页。
$today = current_time('timestamp');
$featuremonth = current_time('timestamp') + 2629743 ; // num = UNIX 30 days
$meta_query = array(
'value' => array( $today, $featuremonth),
'compare' => 'BETWEEN',
'type' => 'NUMERIC'
);
$args = array(
'post_type' => 'workshops',
'posts_per_page' => -1,
'meta_key' => 'workshop_data_event_date',
'orderby' => 'meta_value',
'order' => 'DESC',
'meta_query' => array( $meta_query )
);
$articles = new WP_Query( $args );