您的错误不会显示在屏幕上,因为该页面在操作后会重新加载publish_post
.
我完全遵循了一种不同的方法,我正在wp_insert_post_data
如果标题为空,我将post\\U状态标记为草稿,并在选项表中保存一个简单的标志。我保存的标志用于隐藏帖子发布通知,并显示管理员通知,用于指定标题以发布帖子。
同时,我删除了该选项,因此通知是一次性的。您可以根据需要对其进行更大程度的修改,但这是一个基本的解决方案,应该可以很好地工作。
/**
* Checks for empty post title, if empty sets the post status to draft
*
* @param $data
* @param $postarr
*
* @return array
*/
function wse_279994_check_post_title( $data, $postarr ) {
if ( is_array( $data ) && \'publish\' == $data[\'post_status\'] && empty( $data[\'post_title\'] ) ) {
$data[\'post_status\'] = \'draft\';
update_option( \'wse_279994_post_error\', \'empty_title\' );
}
return $data;
}
add_filter( \'wp_insert_post_data\', \'wse_279994_check_post_title\', 10, 2 );
/**
* If the post title was empty, do not show post published message
*/
add_filter( \'post_updated_messages\', \'wse_279994_remove_all_messages\' );
function wse_279994_remove_all_messages( $messages ) {
if ( get_option( \'wse_279994_post_error\' ) ) {
return array();
} else {
return $messages;
}
}
/**
* Show admin notice for empty post title
*/
add_action( \'admin_notices\', \'wse_279994_show_error\' );
function wse_279994_show_error() {
$screen = get_current_screen();
if ( $screen->id != \'post\' ) {
return;
}
if ( ! get_option( \'wse_279994_post_error\' ) ) {
return;
}
echo \'<div class="error"><p>\' . esc_html__( "You need to enter a Post Title in order to publish it.", "wse" ) . \'</p></div>\';
delete_option( \'wse_279994_post_error\' );
}