Anzeigen benutzerdefinierter Beitragstypen im Meta-Feld "Auf einen Blick"


8

Ich habe festgestellt, dass im folgenden Snippet die Anzahl der benutzerdefinierten Beitragstypen angezeigt wird, die im Widget "Auf einen Blick" des Dashboards veröffentlicht wurden:

Auf einen Blick

Gibt es eine Möglichkeit, diesen "81 Wrestlers" -Text in einen Link zur Liste der Beitragstypen umzuwandeln? Hier ist der Code:

add_filter( 'dashboard_glance_items', 'custom_glance_items', 10, 1 );
function custom_glance_items( $items = array() ) {
    $post_types = array( 'wrestler' );
    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 ) );
            if ( current_user_can( $post_type->cap->edit_posts ) ) {
                $items[] = sprintf( '%2$s', $type, $text ) . "\n";
            } else {
                $items[] = sprintf( '%2$s', $type, $text ) . "\n";
            }
        }
    }
    return $items;
}

Antworten:


8

Hier ist die Funktion, mit der ich CPT im Widget "Auf einen Blick" anzeige

add_action( 'dashboard_glance_items', 'cpad_at_glance_content_table_end' );
function cpad_at_glance_content_table_end() {
    $args = array(
        'public' => true,
        '_builtin' => false
    );
    $output = 'object';
    $operator = 'and';

    $post_types = get_post_types( $args, $output, $operator );
    foreach ( $post_types as $post_type ) {
        $num_posts = wp_count_posts( $post_type->name );
        $num = number_format_i18n( $num_posts->publish );
        $text = _n( $post_type->labels->singular_name, $post_type->labels->name, intval( $num_posts->publish ) );
        if ( current_user_can( 'edit_posts' ) ) {
            $output = '<a href="edit.php?post_type=' . $post_type->name . '">' . $num . ' ' . $text . '</a>';
            echo '<li class="post-count ' . $post_type->name . '-count">' . $output . '</li>';
        }
    }
}

Dadurch kann der Text als Link angeklickt werden. Hoffe das hilft


Aber es werden alle benutzerdefinierten Beitragstypen angezeigt, und ich möchte nur den Beitragstyp "Wrestler" anzeigen.
Hardeep Asrani

Ich habe deinen Code bearbeitet und mit meinem gemischt und es hat funktioniert :) Danke!
Hardeep Asrani

@ Hardeep Asrani froh, dass ich helfen konnte. Wäre toll, wenn Sie Ihren Code als Antwort hinzufügen könnten.
Pieter Goosen

Wahrscheinlich einen langen Schuss @PieterGoosen, aber ich bin auf der Suche , das „Auf einem Blick“ -Box auf immer die richtige Dashicon (angezeigt developer.wordpress.org/resource/dashicons ). Irgendeine Idee?
user2019515

Das hat wirklich geholfen ... Nun eine Idee, wie ich sie mit ihren eigenen Symbolen anzeigen kann? Ich versuche, die Dashicon-Klasse in die Ausgabe einzufügen, $output = '<a class="' . $post_type->menu_icon . '" href="edit.php?post_type=' . $post_type->name . '">' . $num . ' ' . $text . '</a>';aber es gibt Stile, die sie #dashboard_right_now li a::before, #dashboard_right_now li > span::before { content: initial; }überschreiben. Deshalb habe ich versucht, diesen Stil hinzuzufügen: ... aber das überschreibt den Dashicon-Klassenstil. Bitte beraten.
Juliusbangert

1

Okay, ich habe diesen Code verwendet, um nur den Post-Typ "Wrestler" anzuzeigen und es hat funktioniert. Ich habe meinen & Pieter Goosens Code gemischt, um dies herauszubekommen:

add_filter( 'dashboard_glance_items', 'custom_glance_items', 10, 1 );
function custom_glance_items( $items = array() ) {
    $post_types = array( 'wrestler' );
    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 ) );
            if ( current_user_can( $post_type->cap->edit_posts ) ) {
            $output = '<a href="edit.php?post_type=' . $post_type->name . '">' . $text . '</a>';
                echo '<li class="post-count ' . $post_type->name . '-count">' . $output . '</li>';
            } else {
            $output = '<span>' . $text . '</span>';
                echo '<li class="post-count ' . $post_type->name . '-count">' . $output . '</li>';
            }
        }
    }
    return $items;
}

0

In dem von Ihnen geposteten Code kann ich nicht wirklich verstehen, worum es geht:

if ( current_user_can( $post_type->cap->edit_posts ) ) {
  $items[] = sprintf( '%2$s', $type, $text ) . "\n";
} else {
  $items[] = sprintf( '%2$s', $type, $text ) . "\n";
}

IE, wenn der aktuelle Benutzer den Beitragstyp bearbeiten kann, etwas tun, sonst das Gleiche tun ...

Ich denke, Sie möchten den Link zur Beitragsliste anzeigen, wenn der aktuelle Benutzer den Beitragstyp bearbeiten kann (genau wie WordPress dies für Seiten und Beiträge tut).

In diesem Fall wird Ihr Code:

function custom_glance_items( $items = array() ) {
  $post_types = array( 'wrestler' );
  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 ) );

      // show post type list id user can edit the post type,
      // otherwise just swho the name and the count
      if ( current_user_can( $post_type->cap->edit_posts ) ) {
        $edit_url = add_query_arg( array('post_type' => $type),  admin_url('edit.php') );
        $items[] = sprintf( '<a href="%s">%s</a>', $edit_url, $text ) . "\n";
      } else {
        $items[] = $text . "\n";
      }

    } // end if( $num_posts )
  } // end foreach
  return $items;
}

Funktioniert in meinem Fall nicht.
Hardeep Asrani

0

Für alle zukünftigen Fälle, in denen benutzerdefinierte Beitragstypen zum Feld "Auf einen Blick" hinzugefügt wurden, funktionierte der folgende Code in WordPress 4.6.1 für mich. Und es kann für andere funktionieren.

// Add custom taxonomies and custom post types counts to dashboard
    add_action( 'dashboard_glance_items', 'cpt_to_at_a_glance' );
function cpt_to_at_a_glance() {
        // Custom post types counts
        $post_types = get_post_types( array( '_builtin' => false ), 'objects' );
        foreach ( $post_types as $post_type ) {
            $num_posts = wp_count_posts( $post_type->name );
            $num = number_format_i18n( $num_posts->publish );
            $text = _n( $post_type->labels->singular_name, $post_type->labels->name, $num_posts->publish );
            if ( current_user_can( 'edit_posts' ) ) {
                $num = '<li class="post-count"><a href="edit.php?post_type=' . $post_type->name . '">' . $num . ' ' . $text . '</a></li>';
            }
            echo $num;
        }
    }

Alle Gutschriften gehen an den folgenden Autor

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.