Я создал произвольное поле для поста. Хотелось бы или при создании поста или его обновлении, если поле пустое остановить создание, обновление (чтобы не показывалось сообщение "Запись обновлена") и вывести сообщение об ошибке. Я написал код, но сообщение Запись обновлена выводится и сообщение об ошибке при пустом поле не выводится. Подскажите, пожалуйста, что не так в коде. Буду благодарен за любую помощь!
class Event {
public function __construct() {
add_action( 'add_meta_boxes', [ __CLASS__, 'fields_event' ] );
add_action( 'save_post', [ __CLASS__, 'save_update_event' ] );
add_action( 'admin_notices', [ __CLASS__, 'show_error_message' ] );
}
static function fields_event() {
add_meta_box(
'fields_event',
__( 'Event info', 'mantra-house' ),
[ __CLASS__, 'content_box' ],
'post',
'side'
);
}
static function content_box( $post ) {
wp_nonce_field( 'save_event_meta', 'event_meta_nonce' ); ?>
<div class="info-event">
<label for="start-event">
<?= __( 'Start of the event', 'mantra-house' ); ?>
</label>
<input
id="start-event"
type="datetime-local"
name="start-event"
value="<?= esc_attr( get_post_meta( $post->ID, 'start-event', true ) ); ?>">
</div>
<style>
.postbox-header h2 {
padding: 0 16px !important;
}
.info-event {
margin-bottom: 15px;
}
.info-event label {
display: block;
margin-bottom: 5px;
}
</style>
<?php
}
static function save_update_event( $post_id ) {
if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
return;
}
if ( wp_is_post_revision( $post_id ) ) {
return;
}
if ( !current_user_can( 'edit_post', $post_id ) ) {
return;
}
if ( !isset( $_POST[ 'event_meta_nonce' ] ) || ! wp_verify_nonce( $_POST[ 'event_meta_nonce' ], 'save_event_meta' ) ) {
return;
}
if ( !isset( $_POST[ 'start-event' ] ) ) {
return;
}
$event_start = trim( $_POST[ 'start-event' ] );
if ( !empty( $event_start ) ) {
update_post_meta( $post_id, 'start-event', sanitize_text_field( $event_start ) );
} else {
add_filter( 'redirect_post_location', function( $location ) {
return add_query_arg( 'event_error', 1, $location );
} );
return;
}
}
static function show_error_message() {
if ( isset( $_GET[ 'event_error' ] ) ) {
echo '<div class="notice notice-error is-dismissible">';
echo '<p>' . __( 'The "Start of the Event" field cannot be empty. Please fill it out.', 'mantra-house' ) . '</p>';
echo '</div>';
}
}