我正在努力通过活动管理的wp_query获得一个有效的解决方案,目前按活动开始日期发布订单;时间过得很好。现在我想要一些自定义设置。
使用两个元框meta_key=> start_datetime
和meta_key=> end_datetime
1- key=> end_datetime
是帖子结束的日期和时间(不再显示在结果中)
2- 另外,在帖子中打印一些文本,因为还有两个小时才能开始活动。e.g <p>LIVE</p>
How to hide post when date&time end, and add some text as remain 2 hours to start?
$today = date("Y/m/j");
$args (array(
\'post_type\' => \'event\',
\'posts_per_page\' => 10,
\'meta_key\' => \'start_datetime\',
\'orderby\' => \'meta_value\',
\'order\' => \'ASC\',
\'meta_query\' => array(
array(
\'key\' => \'start_datetime\',
\'value\' => $today,
\'compare\' => \'>=\',
\'type\' => \'CHAR\'
)
),
\'tax_query\' => array(
\'relation\' => \'AND\',
array(
\'key\' => \'end_datetime\',
\'meta-value\' => $value,
\'compare\' => \'=<\'
)
)
));
$query = new WP_Query( $args );
if ( $query->have_posts() ) {
while( $query->have_posts() ) {
$query->the_post();
the_title();
}
}
SO网友:Beee
我检查了你的查询,发现里面有很多垃圾。您可以将元键定义为2x。一次作为meta\\u键,一次作为meta\\u查询。只保留查询,它有更多选项。
其次,税务查询完全错误。税务查询的参数与元查询的参数不同。您需要分类、字段、术语和可能的比较。根据您的信息,我看不到使用税务查询的理由,所以我在示例中删除了它。
我非常喜欢将日期/时间存储为unix时间戳。比日期字符串更容易比较和排序。通过查看您的today字符串,我假设其余的也是该格式,因此我将使用该格式作为示例。
下面的代码是我背下来写的,因为我没有可以处理的事件(使用那个元键),但我认为你会得到大部分想要的结果,如果没有,也许可以稍微调整一下。
$today = date( \'Y/m/d\' );
$args = array(
\'post_type\' => \'event\',
\'posts_per_page\' => 10,
\'order\' => \'ASC\',
\'meta_query\' => array(
// get posts which have an end_datetime which is bigger than or equal to $today (and thus hide the ones which have ended before today)
\'end_clause\' => array(
\'key\' => \'end_datetime\',
\'value\' => $today,
\'compare\' => \'>=\',
\'type\' => \'DATE\'
)
),
\'orderby\' => array( \'end_clause\' => \'DESC\' ),
);
$query = new WP_Query( $args );
if ( $query->have_posts() ) {
while( $query->have_posts() ) {
$query->the_post();
the_title();
// check if start_datetime is not empty
if ( ! empty( get_post_meta( get_the_ID(), \'start_datetime\', 1 ) ) ) {
// make unix timestamp of start_datetime
$start_datetime = strtotime( date( \'U\', get_post_meta( get_the_ID(), \'start_datetime\', 1 ) ) );
// make unix timestamp of now
$now = date( \'U\', current_time( \'timestamp\' ) );
// if (start_time - now) is smaller than 7200 seconds
if ( ( $start_datetime - $now ) < 2 * HOUR_IN_SECONDS ) {
echo \'<p>LIVE</p>\';
}
}
}
}
如果有帮助,请告诉我。