Запретить публикацию поста если нет заголовка или он содержит больше чем 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
}
→ Ссылка