私は以下のスニペットがDashboardのAt A Glanceウィジェットで公開されたカスタム投稿タイプの数を表示することを発見しました。
「81 Wrestlers」というテキストを投稿タイプリストへのリンクに変える方法はありますか。これがコードです:
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;
}
これは私が "一目でわかる"ウィジェットにCPTを表示するために使用する関数です。
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>';
}
}
}
これにより、テキストがリンクとしてクリック可能になります。お役に立てれば
さて、だから私は "レスラー"の投稿タイプを表示するためだけにこのコードを使っていましたが、うまくいきました。私はこれを実現するために私のものとPieter Goosenのコードを混ぜました:
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;
}
'At a Glance'ボックスにカスタム投稿タイプを追加するという将来のすべての出来事のために、WordPress 4.6.1では次のコードが私のために働きました。そしてそれは他人のために働くかもしれません。
// 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;
}
}
すべてのクレジットは に続く著者 に行きます
あなたが投稿したコードでは、理解できないのは以下の点です。
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.現在のユーザーが投稿タイプを編集できる場合は何かを、そうでなければ同じことをします...
現在のユーザーが投稿タイプを編集できる場合は、投稿リストへのリンクを表示したいと思います(WordPressがページや投稿を編集する場合と同じ)。
その場合、あなたのコードは次のようになります。
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;
}