「一目で」メタボックスにカスタム投稿タイプを表示する


8

次のスニペットには、ダッシュボードのAt A Glanceウィジェットで公開されているカスタム投稿タイプの数が次のように表示されます。

一目で

その「81レスラー」のテキストを投稿タイプリストへのリンクに変える方法はありますか。コードは次のとおりです。

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

回答:


8

これは、「At a glance」ウィジェットに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>';
        }
    }
}

これにより、テキストがリンクとしてクリック可能になります。お役に立てれば


ただし、すべてのカスタム投稿タイプが表示されており、「レスラー」投稿タイプのみを表示します。
Hardeep Asrani 14年

私はあなたのコードを編集して私のものと混ぜました、そしてそれはうまくいきました:)ありがとう!
Hardeep Asrani 14年

@Hardeep Asraniは私がお手伝いできてうれしいです。答えとしてコードを追加できればすばらしいと思います。
Pieter Goosen 14年

@PieterGoosenおそらくロングショットですが、適切なDashicon(developer.wordpress.org/resource/dashicons)を表示するために[At a glance]ボックスを取得しようと考えています。何か案が?
user2019515 2016年

これは本当に役立ちました...独自のアイコンでそれらを表示する方法を教えてください。出力にdashiconクラスを追加しようとしています... $output = '<a class="' . $post_type->menu_icon . '" href="edit.php?post_type=' . $post_type->name . '">' . $num . ' ' . $text . '</a>';...しかし、それをオーバーライドするスタイルがあるため、このスタイルを追加しようとしました:#dashboard_right_now li a::before, #dashboard_right_now li > span::before { content: initial; }...が、dashiconクラススタイルをオーバーライドします。お知らせ下さい。
juliusbangert 2017

2

わかりましたので、このコードを使用して「レスラー」の投稿タイプのみを表示しました。私はこれとピーターグーセンのコードを混ぜてこれを出しました:

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

あなたが投稿したコードでは、私は本当に何の意味があるのか​​理解できません:

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が現在のユーザーが投稿タイプを編集できる場合は何かを行い、そうでない場合は同じことを行います...

現在のユーザーが投稿タイプを編集できる場合(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;
}

私の場合は機能しません。
Hardeep Asrani 14年

0

今後のすべての出来事について、カスタムの投稿タイプを[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;
        }
    }

すべてのクレジットは次の著者に送られます

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.