Запретить публикацию поста если нет заголовка или он содержит больше чем 70 символов
Мне нужно запретить публикацию поста если в его заголовке превышен лимит количества введенных символов. То есть если контент райтер создал заголовок в котором больше 70ти символов то в админ панели должно появится сообщение об ошибке и пост сохраняется в драфт.
Ответы (1 шт):
Автор решения: Darth KYL
→ Ссылка
если вы используете класический редактор, то можно сделать например вот так:
add_action( 'save_post', 'maybe_move_to_draft', 10, 2 );
function maybe_move_to_draft( $post_id, $post ) {
if ( mb_strlen( $post->post_title ) < 80 ) {
return;
}
remove_action( 'save_post', 'maybe_move_to_draft' );
wp_update_post( [ 'ID' => $post_id, 'post_status' => 'draft' ] );
add_action( 'save_post', 'maybe_move_to_draft', 10, 2 );
// добавим параметр в линку для отображения уведомления
add_filter( 'redirect_post_location', function( $location ) {
return add_query_arg( 'invalid_title', 1, $location );
} );
}
add_filter( 'removable_query_args', 'add_removable_arg' );
// удалим параметр из линки, чтобы уведомдение не отображалось постоянно
function add_removable_arg($args) {
array_push( $args, 'invalid_title' );
return $args;
}
add_action( 'admin_notices', 'my_plugin_notice' );
// отображаем уведомления когда есть необходимый параметр
function my_plugin_notice() {
if ( ! isset( $_GET['invalid_title'] ) ) {
return;
}
?>
<div class="notice notice-error is-dismissible">
<p><?php _e( 'Title more than 70 symbols' ); ?></p>
</div>
<?php
}