Hiển thị các loại bài đăng tùy chỉnh trong hộp tại một hộp Meta Glance


8

Tôi đã tìm thấy đoạn mã sau sẽ hiển thị số Loại bài đăng tùy chỉnh được xuất bản trong tiện ích At A Glance của Dashboard, như thế này:

Nhìn thoáng qua

Có cách nào để biến văn bản "81 Wrestlers" thành một liên kết đến danh sách các loại bài đăng. Đây là mã:

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

Câu trả lời:


8

Đây là chức năng mà tôi sử dụng để hiển thị CPT trong tiện ích "Trong nháy mắt"

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

Điều này làm cho văn bản có thể nhấp vào như liên kết. Hi vọng điêu nay co ich


Nhưng nó hiển thị tất cả các loại bài đăng tùy chỉnh và tôi chỉ muốn hiển thị loại bài đăng "Wrestler".
Hardeep Asrani

Tôi đã chỉnh sửa mã của bạn và trộn nó với mã của tôi và nó đã hoạt động :) Cảm ơn!
Hardeep Asrani

@Hardeep Asrani rất vui vì tôi có thể giúp. Sẽ thật tuyệt nếu bạn có thể thêm mã của mình làm câu trả lời.
Pieter Goosen

@PieterGoosen Có lẽ là một cú sút xa, nhưng tôi đang tìm kiếm hộp "Trong nháy mắt" để hiển thị đúng Dashicon ( developer.wordpress.org/resource/dashicons ). Bất kỳ ý tưởng?
dùng2019515

Điều này thực sự có ích ... Bây giờ có ý tưởng nào để tôi có thể hiển thị chúng với các biểu tượng của riêng mình không? Tôi đang cố gắng thêm lớp dashicon trong đầu ra ... $output = '<a class="' . $post_type->menu_icon . '" href="edit.php?post_type=' . $post_type->name . '">' . $num . ' ' . $text . '</a>';... nhưng có những kiểu ghi đè lên nó, vì vậy tôi đã thử thêm kiểu này: #dashboard_right_now li a::before, #dashboard_right_now li > span::before { content: initial; }... nhưng nó ghi đè lên kiểu của lớp dashicon. Xin tư vấn.
juliusbangert

1

Được rồi, vì vậy tôi đã sử dụng mã này để chỉ hiển thị loại bài "đô vật" và nó hoạt động. Tôi đã trộn mã của tôi và Pieter Goosen để có được điều này:

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

Trong mã bạn đã đăng tôi không thể thực sự hiểu ý nghĩa của:

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 nếu người dùng hiện tại có thể chỉnh sửa loại bài đăng, hãy làm điều gì đó, nếu không thì hãy làm điều tương tự ...

Tôi đoán bạn muốn hiển thị liên kết đến danh sách bài đăng nếu người dùng hiện tại có thể chỉnh sửa loại bài đăng (giống như WordPress làm cho các trang và bài đăng).

Trong trường hợp đó, mã của bạn trở thành:

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

Không làm việc trong trường hợp của tôi.
Hardeep Asrani

0

Đối với tất cả các lần xuất hiện trong tương lai, bằng cách thêm các loại bài đăng tùy chỉnh vào hộp 'Nhìn thoáng qua', đoạn mã sau đã hoạt động với tôi trong WordPress 4.6.1. Và nó có thể làm việc cho những người khác.

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

Tất cả tín dụng cho tác giả sau đây

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.