События: проверьте другое событие с той же датой начала и категорией

Я использую Календарь событий и (исправьте меня, если я ошибаюсь) нет проверки, чтобы увидеть, имеет ли событие конфликт времени с другим событием, которое уже было введено. Например, если в категории уже есть событие с определенным временем начала, не может быть другого события, отправленного с тем же временем начала и в той же категории. Это будет конфликт.

Есть ли способ проверить значения в базе данных для времени начала и категории при отправке сообщения о событиях, и если оба эти значения уже существуют для сообщения, отбросьте пользователя обратно на страницу «Добавить событие»?

EDIT: Вот что я пытаюсь использовать в файле functions.php в качестве исходного файла save_post:

add_action('save_post', 'nu_time_conflict'); function nu_time_conflict($post_id) { $prevent_publish = NULL; if (isset($_REQUEST['EventStartDate']) && isset($_REQUEST['EventStartHour']) && isset($_REQUEST['EventStartMinute'])) { $start_date = date( TribeDateUtils::DBDATETIMEFORMAT, strtotime($_REQUEST['EventStartDate'] . " " . $_REQUEST['EventStartHour'] . ":" . $_REQUEST['EventStartMinute'] . ":00") ); } else { die('Ingen datum valde.'); } if (isset($_REQUEST['EventEndDate']) && isset($_REQUEST['EventEndHour']) && isset($_REQUEST['EventEndMinute'])) { $end_date = date( TribeDateUtils::DBDATETIMEFORMAT, strtotime($_REQUEST['EventEndDate'] . " " . $_REQUEST['EventEndHour'] . ":" . $_REQUEST['EventEndMinute'] . ":59") ); } else { die('Ingen datum valde.');; } //Query post type 'tribe_events' to check for posts whose meta values match the POSTed ones $args = array( 'post__not_in'=> array($post_id), 'post_type' => 'tribe_events', 'post_status' => array('publish','pending','future','private'), 'meta_query' => array( 'relation' => 'OR', array( 'key' => 'EventStartDate', 'value' => array(strtotime($start_date),strtotime($end_date)), 'compare' => 'BETWEEN' ), array( 'key' => 'EventEndDate', 'value' => array(strtotime($start_date),strtotime($end_date)), 'compare' => 'BETWEEN' ) ) ); $existingMeta = get_posts( $args ); if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return; if(empty($existingMeta)){ remove_action('save_post', 'nu_time_conflict'); wp_update_post(array('ID' => $post_id, 'post_status' => 'pending')); $current_user = wp_get_current_user(); $user_mail = $current_user->user_email; $admin_email = get_option('admin_email'); $type = get_post_type( $post_id ); if (( !wp_is_post_revision( $post_id )) && ($type = 'tribe_events' )) { $to = array($user_mail, $admin_email); $subject = 'Ny bokning'; $message = $current_user->user_firstname.' '.$current_user->user_lastname.' har skapat en ny bokning.<br>'; $message .= 'För att redigera gå in på ' .get_permalink($post_id).'<br><br>'; $message .= '<em><small>OBS! Bokningen är inte giltig utan att bli bekräftad av administratören.</small></em>'; wp_mail($to, $subject, $message ); } add_action('save_post', 'nu_time_conflict'); $prevent_publish = FALSE; } else { $prevent_publish = TRUE; } if ($prevent_publish) { remove_action('save_post', 'nu_time_conflict'); wp_update_post(array('ID' => $post_id, 'post_status' => 'draft')); add_action('save_post', 'nu_time_conflict'); } } 

И здесь будет мое перенаправление и пользовательское сообщение:

 add_filter('redirect_post_location','nu_redirect_location',10,2); function nu_redirect_location($location,$post_id){ if (isset($_POST['publish'])) { $status = get_post_status( $post_id ); if($status=='draft'){ $location = add_query_arg('message', 10, $location); } } return $location; } add_filter('post_updated_messages', 'nu_custom_messages'); function nu_custom_messages($messages){ $messages['tribe_events'][10] = 'Den valda tiden är inte tillgänglig. Välj ny tid'; return $messages; } 

Это либо не делает сравнения, чтобы проверить, существуют ли эти даты, либо что-то не так с моей IF-операцией. Он считает, что все записи действительны и отправляют письма, и я целенаправленно помещаю неправильные. Таким образом, сообщения не помечены как черновики, а сообщение – это сообщение для успешной публикации. (Письма также отправляются при загрузке страницы перед отправкой любых данных. Что с этим связано? Должен ли я использовать save_post?)

Любая помощь приветствуется. Поскольку Календарь событий не имеет функции доступности, насколько я могу судить, заставить работать работать было бы идеально.

Solutions Collecting From Web of "События: проверьте другое событие с той же датой начала и категорией"