Menampilkan Jenis Posting Kustom Dalam "Sekilas" Meta Box

8

Saya menemukan cuplikan berikut akan menampilkan jumlah Jenis Pos Kustom yang diterbitkan di widget Dasbor Sekilas, seperti ini:

Sekilas

Apakah ada cara untuk mengubah teks "81 Wrestlers" menjadi tautan ke daftar jenis posting. Berikut kodenya:

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;
}
Hardeep Asrani
sumber

Jawaban:

8

Berikut adalah fungsi yang saya gunakan untuk menampilkan CPT di widget "Sekilas"

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

Ini membuat teks dapat diklik sebagai tautan. Semoga ini membantu

Pieter Goosen
sumber
Tapi itu menunjukkan semua jenis posting kustom, dan saya hanya ingin menampilkan jenis posting "Wrestler".
Hardeep Asrani
Saya mengedit kode Anda & mencampurnya dengan kode saya & berhasil :) Terima kasih!
Hardeep Asrani
@Hardeep Asrani senang saya bisa membantu. Akan lebih bagus jika Anda bisa menambahkan kode Anda sebagai jawaban.
Pieter Goosen
@PieterGoosen Mungkin merupakan pukulan panjang, tapi saya ingin mendapatkan kotak "Sekilas" untuk menampilkan Dashicon yang tepat ( developer.wordpress.org/resource/dashicons ). Ada ide?
user2019515
Ini sangat membantu ... Sekarang tahu bagaimana saya bisa menampilkannya dengan ikon mereka sendiri? Saya mencoba menambahkan kelas dashicon di output ... $output = '<a class="' . $post_type->menu_icon . '" href="edit.php?post_type=' . $post_type->name . '">' . $num . ' ' . $text . '</a>';... tetapi ada gaya yang menimpanya, jadi saya mencoba menambahkan gaya ini: #dashboard_right_now li a::before, #dashboard_right_now li > span::before { content: initial; }... tapi itu mengesampingkan gaya kelas dashicon. Mohon saran.
juliusbangert
2

Oke, jadi saya menggunakan kode ini untuk hanya menampilkan jenis posting "pegulat" & berhasil. Saya mencampur kode saya & Pieter Goosen untuk mengeluarkan ini:

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;
}
Hardeep Asrani
sumber
0

Dalam kode yang Anda posting, saya benar-benar tidak mengerti apa gunanya:

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

Yaitu jika pengguna saat ini dapat mengedit jenis posting melakukan sesuatu, jika tidak lakukan hal yang sama ...

Saya kira Anda ingin menunjukkan tautan ke daftar posting jika pengguna saat ini dapat mengedit jenis posting (seperti yang dilakukan WordPress untuk halaman dan posting).

Dalam hal ini kode Anda menjadi:

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;
}
gmazzap
sumber
Tidak berfungsi dalam kasus saya.
Hardeep Asrani
0

Untuk semua kejadian di masa mendatang, dari menambahkan jenis posting khusus ke kotak 'At a Glance', kode berikut berfungsi untuk saya di WordPress 4.6.1. Dan itu mungkin berhasil untuk orang lain.

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

Semua kredit diberikan kepada penulis berikut

Klewis
sumber