web-dev-qa-db-ja.com

Wordpressの投稿数がカスタム投稿タイプの投稿者に表示されない

Dave Rupertの定型句 に基づいてカスタム投稿タイプをいくつか作成し、 Post Type Switcher を使用して既存の投稿をこれらの新しく作成したCPTに移行しました。プラグインCPT名とsupport*属性を変更する以外は、定型句を変更しませんでした。

'supports' => array(
   'title',
   'editor',
   'author',
   'thumbnail',
   'excerpt',
   'comments'
),

移行された投稿には投稿者が正しく表示され、投稿の投稿者を変更することが可能です。ただし、Usersセクションで作成者リストを表示すると、管理者以外の作成者の投稿カウンターはzero(0)です。作成者の役割を一時的に管理者に変更して再び元に戻すことは、個々の作成者の正しい投稿数を表示するのに役立ちません。

データベースレコードもチェックしました(下記のwp_postsテーブルからpls check view)。著者IDは個々の投稿に正しく割り当てられているようです。それでも、私はデータベースのどこかで作家との関係を壊したと思いますが、どこで見つけられるのでしょうか。

誰もがこの問題に取り組む方法を知っていますか?

view from wp_posts table

1
Metin

これは私が放棄された質問から再採択した答えです。これはあなたがこの問題を解決するのに役立つと思いました

デフォルトでは、すべてのカスタム投稿タイプがメインクエリから除外されているため、フロントエンドの作成者ページに移動しても投稿が表示されません。これを実現するには、これらの投稿タイプを含めるようにメインクエリを変更する必要があります。この目的のために、あなたは pre_get_posts アクションフックを使うことになるでしょう。著者アーカイブページにいることを確認するために、条件タグ is_author() も使用します。 (私は私のカスタム投稿タイプevent_typecamerasを使ってこのコードをテストしました。それに応じてこれを変更してください)

function custom_post_author_archive($query) {
    if ($query->is_author() && $query->is_main_query() )
        $query->set( 'post_type', array('event_type', 'cameras', 'post', 'page') );
}
add_action('pre_get_posts', 'custom_post_author_archive');

バックエンドの投稿数の問題に取り組むには、著者ページのposts列を設定解除してから、すべての投稿タイプを数える新しい列、つまりevent_typeに置き換えることが賢明です。投稿とページ。あなたはそれに応じてこれを編集することができます

ここでは、 manage_users_columnsmanage_users_custom_columnを使用します。これはあまり文書化されていません。

function add_extra_user_column($columns) { //Add CPT Column for events and remove default posts column
    unset($columns['posts']);
    return array_merge( $columns, 
              array('foo' => __('Posts')) );
}
add_filter('manage_users_columns' , 'add_extra_user_column');

function add_post_type_column( $value, $column_name, $id ) { //Print event_type value
  if( $column_name == 'foo' ) {
    global $wpdb;
    $count = (int) $wpdb->get_var( $wpdb->prepare(
      "SELECT COUNT(ID) FROM $wpdb->posts WHERE 
       post_type IN ('event_type', 'cameras', 'post', 'page') AND post_status = 'publish' AND post_author = %d",
       $id
    ) );

    if ( $count > 0 ) {
        $r = "<a href='edit.php?author=$id'>";
        $r .= $count;
        $r .= '</a>';
    } else {
        $r = 0;
    }

    return $r;
  }
}

add_filter( 'manage_users_custom_column', 'add_post_type_column', 10, 3 );
2
Pieter Goosen