web-dev-qa-db-ja.com

リストの分類/カテゴリー数で、リストに掲載された投稿のみを表示

私は分類されたリストを公開されたアイテムのみの対応する投稿数と共に表示したいと思います。 WPのドキュメントをチェックして、get_terms関数 を使うことでそれを達成できることはほとんどないようですhttps://developer.wordpress.org/reference/functions/get_terms/ ドラフトやゴミ箱を含むすべての投稿数を取得します。

$taxonomy = 'item_category';
  $args =  array(
    'hide_empty' => false,
    'orderby'    => 'name',
    'order'      => 'ASC'
  );
$terms = get_terms( $taxonomy , $args );

foreach( $terms as $term ) {
  echo $term->name . ' - ' . $term->count . '<br/>';
}

WPには、get_terms関数から表示するための組み込みの引数がありますか?文書には表示されていません。目的の出力を達成するために試すことができる他の機能やフィルタはありますか?

1
Carl Alberto

ソースをチェックして、これを成し遂げる唯一の方法は各用語の出力カウントをフィルタすることであるように思われます、あなたはget_terms呼び出しの前にこのフィルタを挿入することによってそれを達成することができます。これは常に発行済みのアイテム数を表示するようになるので、その使用方法には注意してください。

function get_terms_filter_published( $terms, $taxonomies, $args ) {
  global $wpdb;
  $taxonomy = $taxonomies[0];
  if ( ! is_array($terms) && count($terms) < 1 ) {
    return $terms;
  }

  $filtered_terms = array();
  $ctr = 0;
  foreach ( $terms as $term ) {
    $result = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->posts p JOIN $wpdb->term_relationships rl ON p.ID = rl.object_id WHERE rl.term_taxonomy_id = $term->term_id AND p.post_status = 'publish' LIMIT 1");
    $published_terms[ $ctr ] = $term;
    if ( intval($result) > 0 ) {
        $published_terms[ $ctr ] = $term;
    } else {
        // you can comment this out if you don't want to show empty terms
        $published_terms[ $ctr ]->count = 0;
    }
    $ctr++;
  }
  return $published_terms;
}

add_filter('get_terms', 'get_terms_filter_published', 10, 3);

$taxonomy = 'item_category';
$args =  array(
  'hide_empty' => false,
  'orderby'    => 'name',
  'order'      => 'ASC'
);
$terms = get_terms( $taxonomy , $args );

foreach( $terms as $term ) {
  echo $term->name . ' - ' . $term->count . '<br/>';
}
1
Carl Alberto