web-dev-qa-db-fra.com

Comment pouvez-vous vous assurer que les publications des auteurs ne dépassent pas 250 mots?

Je crée un site Web auquel les auteurs peuvent s'inscrire et écrire des articles. Cependant, je ne veux pas de messages de qualité médiocre. Donc, tout d’abord, je veux que les messages ne soient pas vides et ne dépassent pas 250 mots.

Donc, quelque chose comme:

if (empty($post) && $post < 250) {
 echo 'Error, must be longer than 250 words';
}

Évidemment, ce code ne fonctionnera pas, mais c’est une idée générale de ce que je veux. Cependant, je ne suis pas vraiment sûr de savoir comment s'y prendre. Est-ce un hook WordPress à utiliser?

3
chap

Empêcher les auteurs de publier un contenu trop court:

Voici une idée utilisant un statut de publication personnalisé, par exemple short:

/**
 * Register a custom 'short' post status
 *
 * @see http://wordpress.stackexchange.com/a/159044/26350
 */

function wpse_short_post_status()
{
    register_post_status( 'short', array(
        'label'                     => _x( 'Short', 'post' ),
        'public'                    => false,
        'exclude_from_search'       => true,
        'show_in_admin_all_list'    => true,
        'show_in_admin_status_list' => true,
        'label_count'               => _n_noop( 'Short <span class="count">(%s)</span>', 
                                                'Short <span class="count">(%s)</span>' )
    ) );
}

add_action( 'init', 'wpse_short_post_status' );

Nous pouvons alors voir tous les articles avec un contenu trop court ici:

/wp-admin/edit.php?post_status=short&post_type=post

avec l'onglet supplémentaire:

Short post status

Pour empêcher les auteurs de publier des articles avec un contenu trop court, nous pouvons utiliser le filtre wp_insert_post_data:

/**
 * Prevent authors from publishing posts with too short content.
 *
 * @see http://wordpress.stackexchange.com/a/159044/26350
 */

function wpse_prevent_short_content( $data , $postarr )
{
    // Editors and admins can publish all posts:
    if( current_user_can( 'edit_others_posts' ) )
        return $data;   

    // Authors can't publish posts with too short content: 
    $wordcount = count( explode( ' ', strip_tags( $data['post_content'] ) ) );

    if( 'publish' === $data['post_status'] && $wordcount <= 250 )
        $data['post_status'] = 'short';

    return $data;
}

add_filter( 'wp_insert_post_data', 'wpse_prevent_short_content', PHP_INT_MAX, 2 );

où nous forçons le statut de publication à court à publier .

Nous pouvons l'utiliser pour avertir l'utilisateur que le contenu est trop court:

/**
 * Display a too short content warning.
 *
 * @see http://wordpress.stackexchange.com/a/159044/26350
 */

function wpse_admin_notice() {
    $screen = get_current_screen();

    if(    'post' === $screen->base
        && 'post' === $screen->id
        && 'short' === $GLOBALS['post']->post_status
        && ! current_user_can( 'edit_others_posts' )
    )
    { 
    printf( '<div class="error"><p>%s</p></div><style>#message{display:none;}</style>',
        __( 'Warning: Post not published - the content must exceed 250 words!' )
    );
    }
}

add_action( 'admin_notices', 'wpse_admin_notice' );

Voici une capture d'écran de l'avertissement:

Warning


J'espère que vous pourrez le modifier selon vos besoins, par exemple si vous en avez besoin pour d'autres types de publications que post .

6
birgire