it-swarm.com.de

Wie man das Zählen von Beiträgen und Kommentaren mit dem dashboard_glance_items-Hook deaktiviert

Ich habe eine Site mit mehreren Autoren und ich habe bereits einige Hooks verwendet, um zu verhindern, dass Beiträge und Medien anderer Autoren angezeigt werden. Jetzt werden im Wordpress-Dashboard im Abschnitt "Auf einen Blick" die gesamten Beiträge und Kommentare angezeigt. Sie können sie im Moment anklicken und ich möchte, dass sie dies nicht können.

Daher habe ich einen Hook gefunden, der dies zum Ziel hat, obwohl ich erst zu Beginn lerne, wie ich mithilfe von Hooks Anpassungen vornehme, sodass ich etwas Hilfe benötige. Hier ist, was ich gerade habe, nur die ID des aktuellen Benutzers auszugeben, um zu überprüfen, ob es der richtige Hook ist:

add_filter('dashboard_glance_items', 'make_unclickable');

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

    return $items;
}

Also, wie kann ich die Links nicht klickbar machen?

3
chap

Der Filter dashboard_glance_items ist nur zum Ändern der zusätzlichen Elemente nützlich. Die Datenelemente für Posts/Kommentare wurden bereits angezeigt.

Hier sind drei Ideen:

Methode 1 - Verwenden Sie den dashboard_glance_items-Filter:

Mit dem folgenden Filter können Sie die Elemente posts/pages/comments aus der Ausgabe von wp_dashboard_right_now() entfernen.

Der Trick ist einfach, WordPress zu beschimpfen, dass es keine Posts/Kommentare/Seiten gibt.

Hier ist eine Implementierung (ich bin sicher, ich kann dies weiter verfeinern):

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 );
}

Anschließend können Sie die Elemente posts/pages/comments über den Filter dashboard_glance_items erneut hinzufügen.

Methode 2 - Verwenden Sie die Ausgabe wp_dashboard_right_now() erneut:

Hier ist ein Hack, bei dem wir das aktuelle Right Now Widget entfernen und ein weiteres Custom Right Now Widget hinzufügen:

/**
 * 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', 
        );

    }
);   

wo unser einfacher Demo-Callback ist:

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>' );
}

Hier verwenden wir die Ausgabepufferung, um den Inhalt von wp_dashboard_right_now() abzufangen und dann alle Links von ihm zu ersetzen.

Dies ist nur ein einfaches Beispiel. Möglicherweise müssen Sie preg_replace() verwenden, um nur die Posts/Kommentare als Ziel festzulegen.

Sie können auch die relevanten Teile aus der wp_dashboard_right_now()-Kernfunktion abrufen, um sie im custom_wp_dashboard_right_now()-Rückruf zu verwenden.

Methode 3 - CSS/Javascript

Wir könnten diese Links auch über CSS/Javascript modifizieren. Aber die Umsetzung überlasse ich dir ;-)


Ich hoffe, Sie können dies an Ihre Bedürfnisse anpassen.

3
birgire

Leider gibt es keinen "Filter" zum Entfernen oder Bearbeiten der vorherigen Elemente im Feld "Auf einen Blick".

EDIT

Ich habe den Teil "Wordpress Core Hack" entfernt, weil ich ein solches Verhalten nicht fördern möchte und Sie den Code nicht jedes Mal bearbeiten sollen, wenn Wordpress eine neue Version veröffentlicht :)

Und hier ist ein Code, mit dem benutzerdefinierte Statistiken für Beitragstypen angehängt werden können, ohne dass darauf geklickt werden kann:

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