Не выводится сообщение об ошибке при сохранении или обновлении поста?

Я создал произвольное поле для поста. Хотелось бы или при создании поста или его обновлении, если поле пустое остановить создание, обновление (чтобы не показывалось сообщение "Запись обновлена") и вывести сообщение об ошибке. Я написал код, но сообщение Запись обновлена выводится и сообщение об ошибке при пустом поле не выводится. Подскажите, пожалуйста, что не так в коде. Буду благодарен за любую помощь!

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>';
    }

}
  • Вопрос задан
  • 4 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы