Ich habe festgestellt, dass das folgende Snippet die Anzahl der im Dashboard-Widget "Auf einen Blick" veröffentlichten benutzerdefinierten Beitragstypen wie folgt anzeigt:
Gibt es eine Möglichkeit, den Text "81 Wrestler" 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;
}
Mit dieser Funktion kann ich CPT im Widget "Auf einen Blick" anzeigen
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
Okay, also habe ich diesen Code verwendet, um nur den Post-Typ "Wrestler" anzuzeigen und es hat funktioniert. Ich habe meinen & Pieter Goosens Code gemischt, um das herauszufinden:
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;
}
Für alle zukünftigen Vorkommnisse beim Hinzufügen von benutzerdefinierten Beitragstypen zum Feld "Auf einen Blick" hat der folgende Code in WordPress 4.6.1 für mich funktioniert. Und es könnte 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
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";
}
I.E. Wenn der aktuelle Benutzer den Beitragstyp bearbeiten kann, machen Sie etwas, andernfalls machen Sie dasselbe ...
Ich denke, Sie möchten den Link zur Beitragsliste anzeigen, wenn der aktuelle Benutzer den Beitragstyp bearbeiten kann (genau wie WordPress für Seiten und Beiträge).
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;
}