#wordpress #hook #custom-post-type
#wordpress #крюк #пользовательский тип записи
Вопрос:
Я попытался объединить свои две функции, но не могу понять, как. Я хотел бы сделать изображение обязательным. Я знаю, что есть много похожих вопросов, но они всегда заканчиваются на wp_die();
, что, на мой взгляд, не очень удобно для пользователя. Я не могу разобраться с сообщением об ошибке WordPress.
Что должен делать мой код:
- Проверьте, есть ли в публикации рекомендуемое изображение при сохранении / публикации
- Если нет, сделайте публикацию черновиком и покажите сообщение об ошибке (требуется избранное изображение! Сообщение не было опубликовано / обновлено.)
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');