【发布时间】:2018-10-02 22:24:54
【问题描述】:
由于 WordPress 内置日历不支持自定义帖子类型,使用第三方版本https://wordpress.org/plugins/cpt-calender-widget/。它根据发布日期而不是使用具有高级自定义字段 (ACF) 的日期选择器设置的开始和结束日期来提取日期。
尝试更新插件代码 https://pastebin.com/0URjDg5Q 以改为从 ACF 日期字段中提取。
假设相关代码如下(但请随意查看 pastebin 以获取完整代码):
// Get days with posts
$dayswithposts = $wpdb->get_results( "SELECT DISTINCT DAYOFMONTH( post_date )
FROM $wpdb->posts WHERE MONTH( post_date ) = '$thismonth'
AND YEAR( post_date ) = '$thisyear'
AND post_type IN ( $post_types ) AND post_status = 'publish'
AND post_date < '" . current_time( 'mysql' ) . '\'', ARRAY_N );
if ( $dayswithposts ) {
foreach ( (array) $dayswithposts as $daywith ) {
$daywithpost[] = $daywith[0];
}
} else {
$daywithpost = array();
并使用它来根据 ACF 日期字段获取即将发生的事件:
<?php
// Upcoming Events & Events Underday
$now = date('Y-m-d H:i:s');
$args = array(
'post_type' => 'events_post_type',
'posts_per_page' => -1,
'meta_query' => array(
'relation' => 'OR',
'date_upcoming_clause' => array(
'key' => 'event_start_date',
'compare' => '>=',
'value' => $now,
'type' => 'DATETIME'
),
array(
'relation' => 'AND',
'date_started_clause' => array(
'key' => 'event_start_date',
'compare' => '<=',
'value' => $now,
'type' => 'DATETIME'
),
'date_end_clause' => array(
'key' => 'event_end_date',
'compare' => '>=',
'value' => $now,
'type' => 'DATETIME'
),
),
),
'orderby' => array(
'date_started_clause' => 'ASC',
'date_end_clause' => 'ASC',
'date_upcoming_clause' => 'ASC',
),
);
$the_query = new WP_Query($args);
?>
有没有一种简单的方法让插件代码利用相关的 ACF 代码? ACF 非常符合逻辑,但对直接调用数据库的日历插件方法不熟悉。需要注意的是,这个用法是寻找相对相同但不相信找到答案:WORDPRESS: Calendar with custom post type + custom fields。需要注意的是,如果有一种更简单的方法可以使用本机 get_calendar 来执行此操作。
【问题讨论】:
-
令人不安的是,您在没有任何解释的情况下被否决了。投赞成票。我还在寻找一个日历来显示基于与发布日期无关的 ACF 日期的 CPT。我希望你找到了解决方案。
标签: wordpress advanced-custom-fields