web-dev-qa-db-fra.com

Comment rendre les messages et les commentaires non cliquables avec le crochet dashboard_glance_items

J'ai un site multi-auteurs et j'ai déjà utilisé des points d'ancrage pour les empêcher de visionner les publications et les médias d'autres auteurs. Maintenant, dans le tableau de bord Wordpress, dans la section "en un coup d’œil", il affiche le nombre total de publications et de commentaires. Ils peuvent cliquer dessus en ce moment et je voudrais qu'ils ne puissent pas le faire.

Donc, j'ai trouvé un crochet qui cible ceci, bien que je commence seulement à apprendre à personnaliser en utilisant des crochets donc j'ai besoin d'aide. Voici ce que j'ai en ce moment, rappelant simplement l'ID de l'utilisateur actuel pour vérifier que c'est le bon crochet:

add_filter('dashboard_glance_items', 'make_unclickable');

function make_unclickable( $items = array() ) {
    global $current_user;
    echo $current_user->ID;

    return $items;
}

Alors, comment puis-je rendre les liens non cliquables?

3
chap

Le filtre dashboard_glance_items n'est utile que pour modifier les éléments supplémentaires. Les éléments de données posts/comments ont déjà été affichés.

Voici trois idées:

Méthode n ° 1 - Utilisez le filtre dashboard_glance_items:

Vous pouvez utiliser la configuration de filtre suivante pour supprimer les éléments posts/pages/comments de la sortie de wp_dashboard_right_now().

Le truc est simple, c'est de la faute à WordPress de penser qu'il n'y a pas de posts/commentaires/pages.

Voici une implémentation (je suis sûr que je peux l'affiner davantage):

add_action( 'do_meta_boxes', 'custom_do_meta_boxes', 99, 2 );

function custom_do_meta_boxes( $screen, $place )
{
    if( 'dashboard' === $screen && 'normal' === $place )
    {   
        add_filter( 'wp_count_posts', 'custom_wp_count_posts' );
        add_filter( 'wp_count_comments', 'custom_wp_count_comments' );
    }
}

function custom_wp_count_posts( $stats )
{
    static $filter_posts = 0;
    if( 1 === $filter_posts )
        remove_filter( current_filter(), __FUNCTION__ );

    $filter_posts++;
    return null;
}

function custom_wp_count_comments( $stats )
{
    static $filter_comments = 0;
    if( 1 === $filter_comments )
        remove_filter( current_filter(), __FUNCTION__ );

    $filter_comments++;
    return array( 'total_comments' => 0 );
}

Ensuite, vous pouvez ajouter les éléments posts/pages/comments via le filtre dashboard_glance_items.

Méthode n ° 2 - Réutilisez la sortie wp_dashboard_right_now():

Voici un hack, où nous supprimons le widget actuel Right Now et ajoutons un autre personnalisé Right Now widget:

/**
 * Replace the 'Right Now' dashboard widget with our own.
 */

add_action('wp_dashboard_setup',                               
    function()
    {
        // Remove the current 'Right Now' dashboard widget:
        remove_meta_box(
           'dashboard_right_now', 
           'dashboard', 
           'normal'  
        );

        // Add our 'Custom Right Now' dashboard widget:
        add_meta_box(
           'custom_wp_dashboard_right_now',
           __( 'Custom Right Now' ),
           'custom_wp_dashboard_right_now', 
           'dashboard', 
           'normal', 
        );

    }
);   

où notre rappel de démo simple est:

function custom_wp_dashboard_right_now()
{
        // Let wp_dashboard_right_now() do all the hard work:
        ob_start();
        wp_dashboard_right_now();
        $html = ob_get_contents();                                  
        ob_end_clean();

        // Modify the output.

        // Simple example where all links are stripped out:
        echo strip_tags( $html, '<p><div><span><ul><ol><li>' );
}

Ici, nous utilisons la mise en mémoire tampon de sortie pour récupérer le contenu de wp_dashboard_right_now(), puis en remplacer tous les liens.

Ceci est juste un exemple simple. Vous devrez peut-être utiliser preg_replace() pour cibler uniquement les éléments de publications/commentaires.

Vous pouvez également sélectionner les éléments pertinents de la fonction principale wp_dashboard_right_now() à utiliser dans le rappel custom_wp_dashboard_right_now().

Méthode n ° 3 - CSS/Javascript

Nous pourrions également modifier ces liens via CSS/Javascript. Mais je vous laisse la mise en œuvre ;-)


J'espère que vous pourrez adapter cela à vos besoins.

3
birgire

Malheureusement, il n’existe pas de "filtre" pour supprimer ou modifier les éléments précédents de la zone "En bref".

EDIT

J'ai supprimé la partie "Wordpress Core Hack" car je ne veux pas encourager un tel comportement et je ne veux pas que vous modifiiez le code à chaque fois que Wordpress publie une nouvelle version :)

Et voici un code pour ajouter des statistiques sur les types d'articles personnalisés sans être cliquable:

add_filter('dashboard_glance_items', 'make_unclickable');

function make_unclickable( $items  ) {

 $post_types = array( 'post_type_1', 'post_type_2' );

foreach( $post_types as $type ) {

    if( ! post_type_exists( $type ) ) continue;

    $num_posts = wp_count_posts( $type );

    if( $num_posts ) {

        $published = intval( $num_posts->publish );
        $post_type = get_post_type_object( $type );

        $text = _n( '%s ' . $post_type->labels->singular_name, '%s ' . $post_type->labels->name, $published, 'your_textdomain' );
        $text = sprintf( $text, number_format_i18n( $published ) );



            $items[] = sprintf( '<span class="%1$s-count">%2$s</span>', $type, $text ) . "\n";

    }
}

return $items;
 }
4
Waseem Abu Senjer