В вашем коде не хватает проверки на пустое произвольное поле (`start-event`) в методе `save_update_event`, который отвечает за сохранение поста. В результате ошибка не обрабатывается должным образом и сообщение об успешном обновлении поста продолжает отображаться, даже если поле пустое.
Я предлагаю обновить метод `save_update_event`, чтобы убедиться, что поле заполнено, прежде чем продолжать процесс сохранения. Если поле пустое, вы можете использовать функцию `wp_die` для остановки выполнения кода и вывода сообщения об ошибке.
Вот как может выглядеть обновленный метод:
```php
static function save_update_event( $post_id ) {
// Проверяем, была ли отправлена форма
if ( ! isset( $_POST['event_meta_nonce'] ) || ! wp_verify_nonce( $_POST['event_meta_nonce'], 'save_event_meta' ) ) {
return;
}
// Проверяем, является ли пользователь авторизованным
if ( ! current_user_can( 'edit_post', $post_id ) ) {
return;
}
// Проверяем, было ли сохранение автосохранением
if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
return;
}
// Получаем значение из поля
$start_event = isset( $_POST['start-event'] ) ? trim( $_POST['start-event'] ) : '';
// Проверяем, пустое ли поле
if ( empty( $start_event ) ) {
add_filter( 'redirect_post_location', function( $location ) {
return add_query_arg( 'event_error', 'empty_field', $location );
});
return;
}
// Сохраняем значение, если поле не пустое
update_post_meta( $post_id, 'start-event', $start_event );
}
static function show_error_message() {
// Проверяем, есть ли ошибка
if ( isset( $_GET['event_error'] ) && $_GET['event_error'] === 'empty_field' ) {
echo '<div class="notice notice-error"><p>' . __( 'Пожалуйста, заполните поле "Start of the event".', 'mantra-house' ) . '</p></div>';
}
}
```
### Объяснение кода:
1. **Проверка поля на пустоту**: В методе `save_update_event` я добавил проверку на пустоту поля `start-event`. Если поле пустое, выполнение функции завершится без сохранения поста и произойдет редирект с добавленным параметром ошибки.
2. **Использование фильтра `redirect_post_location`**: Этот фильтр используется для добавления параметра к URL, чтобы можно было передать информацию о наличии ошибки.
3. **Вывод сообщения об ошибке**: В функции `show_error_message()` проверяем наличие параметра `event_error` в URL и выводим соответствующее сообщение, если ошибка существует.
Такой подход позволит вам предотвратить обновление записи, если поле пустое, и отобразить сообщение об ошибке.