Требуется создать рекомендуемое изображение показать пользовательское сообщение об ошибке

#wordpress #hook #custom-post-type

#wordpress #крюк #пользовательский тип записи

Вопрос:

Я попытался объединить свои две функции, но не могу понять, как. Я хотел бы сделать изображение обязательным. Я знаю, что есть много похожих вопросов, но они всегда заканчиваются на wp_die(); , что, на мой взгляд, не очень удобно для пользователя. Я не могу разобраться с сообщением об ошибке WordPress.

Что должен делать мой код:

  1. Проверьте, есть ли в публикации рекомендуемое изображение при сохранении / публикации
  2. Если нет, сделайте публикацию черновиком и покажите сообщение об ошибке (требуется избранное изображение! Сообщение не было опубликовано / обновлено.)

PS: В настоящее время сообщение об ошибке отображается сразу после открытия или создания записи. Так не должно быть.

Мой текущий код:

 function featured_image_required($post_id, $post, $update){
    $post_type  = $post->post_type;
    $id         = $post_id;

    if(!has_post_thumbnail($id) AND $post_type == "custom_post_type") {
        remove_action('save_post', 'featured_image_required'); 
        $query = array(
            'ID' => $id,
            'post_status' => 'draft',
        );
        wp_update_post($query, true);
        add_action('save_post', 'featured_image_required');
    }
}
add_action('save_post', 'featured_image_required', 10, 3 );

function show_editor_message($messages){
    global $post;
    $post_type = $post->post_type;

    if (!has_post_thumbnail($post_id) AND $post_type == "custom_post_type") {
        $error_message = 'Featured Image is required! The post was not published.';
        add_settings_error('featured_image_required', '', $error_message, 'error');
        settings_errors( 'featured_image_required' );
        return;
    }
    return $messages;
}
add_action('post_updated_messages', 'show_editor_message');
  

Ответ №1:

Один из вариантов — просто проверить начальный статус сообщения (здесь «авто-черновик») и не отображать сообщение, если сообщение находится в таком состоянии.

save_post Действие требует дополнительной проверки статуса, в противном случае сообщение всегда будет возвращено в состояние черновика, если в нем нет рекомендуемого изображения (например, невозможно удалить сообщение).

Вот измененный код:

 function featured_image_required($post_id, $post, $update){
    $post_type  = $post->post_type;
    $id         = $post_id;

    if($post->post_status == "publish" AND !has_post_thumbnail($id) AND $post_type == "custom_post_type") {
        remove_action('save_post', 'featured_image_required'); 
        $query = array(
            'ID' => $id,
            'post_status' => 'draft',
        );
        wp_update_post($query, true);
        add_action('save_post', 'featured_image_required');
    }
}
add_action('save_post', 'featured_image_required', 10, 3 );

function show_editor_message($messages){
    global $post;
    $post_type = $post->post_type;

    if ($post->post_status != "auto-draft" AND !has_post_thumbnail($post->ID) AND $post_type == "custom_post_type") {
        $error_message = 'Featured Image is required! The post was not published.';
        add_settings_error('featured_image_required', '', $error_message, 'error');
        settings_errors( 'featured_image_required' );
        return;
    }
    return $messages;
}
add_action('post_updated_messages', 'show_editor_message');