web-dev-qa-db-ja.com

カテゴリと子供の投稿数

私はカテゴリから正しい投稿数を取得できない状況があります...そして私はwalkerでwp_list_categoriesをカスタマイズすること以外すべてを試しました。

だから私はカテゴリの階層構造:

cat1
 cat2 (total 8)
  cat3 (total 5)
  cat4 (total 3)

すべての投稿はcat2とcat3-cat4の下にあります。私はcat1を表示しており、投稿数を表示したいです。

私は次の機能を使用する場合:

function wp_get_postcount($id) {
  //return count of post in category child of ID 15
  $count = 0;
  $taxonomy = 'category';
  $args = array('child_of' => $id);
  $tax_terms = get_terms($taxonomy,$args);
  foreach ($tax_terms as $tax_term) {
    $count +=$tax_term->count;
  }
  return $count;
}

私は16の合計数を取得します。これは実際の量の2倍で、明らかに2回数えます。

これの前に私は試してみました:

$children_cats = get_categories(array(
        'hide_empty'    => 0,
        'taxonomy'      => 'category',
));

そして、配列とエコーアウトカウントにforeachを使いました。しかし、親catの下に選択された投稿がないため、0が返されます。

wp_list_categoriesは実際には正しい値を表示します。しかし、walkedで拡張することはできませんでしたので、複雑なhtmlを取得します。

<li>
                            <a class="subcatimg" href="<?php echo $cat_link; ?>"><?php if (function_exists('get_cat_icon_lite')) echo get_cat_icon_lite( $child->cat_ID );?><span><?php _e('Show All','medishop'); ?></span></a>
                            <h4><a href="<?php echo $cat_link; ?>"><?php echo $child->name; ?></a></h4>
                            <p><span><?php echo wp_get_postcount($child->cat_ID); ?></span> <?php _e('products in this category','medishop'); ?></p>
                        </li>

私は本当に選択肢がありません。何かアドバイス?

5
user8842

Daniel LlewellynのコードとWordPressのWP_Queryのリファレンスをチェックして、tax_queryパラメータ内に配列の配列を渡す必要があることに気付きました。それ以外の場合は、投稿数をすべて返すだけです。

これが少し修正されたコードです。

if ( ! function_exists( 'ipt_kb_total_cat_post_count' ) ) :

/**
 * Simple function to get category post count including all subcategories
 *
 * @link http://wordpress.stackexchange.com/a/91551 Stackexchange
 * @param  int $cat_id Category ID
 * @return int         Total post count
 */
function ipt_kb_total_cat_post_count( $cat_id ) {
    $q = new WP_Query( array(
        'nopaging' => true,
        'tax_query' => array(
            array(
                'taxonomy' => 'category',
                'field' => 'id',
                'terms' => $cat_id,
                'include_children' => true,
            ),
        ),
        'fields' => 'ids',
    ) );
    return $q->post_count;
}

endif;

それが私のような人に役立つことを願っています。

9
Swashata Ghosh

私は16の合計数を取得します。これは実際の量の2倍で、明らかに2回数えます。

countプロパティは、その特定のカテゴリの投稿数を返します。これらの投稿にはcat3またはcat4とその親カテゴリ(cat2)の両方が割り当てられているため、16を取得しています。そして、その数を合計しています。

wp_get_postcount($id_of_cat2)のようにその関数を使っていると仮定すると、countプロパティを返すだけです。

$term = get_term((int)$id, $taxonomy);

if(!($term instanceof WP_Error))
  return (int)$term->count;

// or show the error...
return 0;

(これは、以下のコードの$child->countと同じです)

ただし、wp_get_postcount($id_of_cat1)のようにcat1のすべての子カテゴリの投稿数を取得しようとしている場合は、そのカテゴリ階層に従って、投稿が割り当てられていないので、2番目のレベルからの数を合計します。あなたの機能はまさにそれをするようです。

4
onetrickpony

試してみてください。

function wp_get_postcount($id) {
  //return count of post in category child of ID 15
  $q = new WP_Query(array(
    'nopaging' => true,
    'tax_query' => array(
      'taxonomy' => 'category',
      'field' => 'id',
      'terms' => $id,
      'include_children' => true,
  )));
  return $q->post_count;
}

警告:私はこれをテストしていません。

2

これは完璧な解決策ではありませんが、あなたの必要性に応じて、迅速な修正として働くかもしれません。

残念ながら、wordpressがこの数学を実行する方法は、私は "child_of"はあなたが行きたい方法ではないと思います。ただし、問題の投稿のカテゴリとしてcat1を選択することもできます。

まず、カテゴリ3と4の投稿を編集して、これから変更します。

cat1 []
  cat2 [x]
     cat3 [x]
     cat4 []

これに:

cat1 [x]
  cat2 [x]
     cat3 [x]
     cat4 []

それから、すべての子ではなくcat1の投稿数を数えるようにコードを修正します。

私は関連した問題を抱えていて、それをこのように解決しました。ユーザーがカテゴリを正しく選択しないと失敗するため、すべての状況で推奨されるわけではありません。ただし、正しく使用されれば、カウント問題は解決されます。

さらに - デフォルトですべての投稿がcat1の子である場合、この場合にユーザーを支援するために、すべての新しい投稿についてデフォルトのカテゴリを 'cat1'に変更できます。

Settings > Writing.
1
timshutes

私の言うところでは、すべての投稿が第3レベルのカテゴリ(つまりcat3&とcat4)と、それらの直属の親(すなわちcat2)に割り当てられています。ただし、投稿は第1レベルのカテゴリ(つまり、cat1)に割り当てられていません。

私の理解が正しいのであれば、あなたはトップ/ファーストレベルのカテゴリーに基づいて投稿を数えたいと思うでしょう、あなたは私に以下のコードを使うことの何が悪いのか教えてもらえますか?

function wp_get_postcount($id) {
  //return count of post in category child of ID 15
  $count = 0;
  $taxonomy = 'category';
  $args = array('child_of' => $id);
  $tax_terms = get_terms($taxonomy,$args);
  foreach ($tax_terms as $tax_term) {
      if ($tax_term->parent == $id) {
            $count +=$tax_term->count;
      }
  }
  return $count;
}
1

get_terms()を介して分類法を検索している人たちは、引数'pad_counts' => trueを渡して子の数を両親に追加することができます。

例えば ​​:

$my_taxonomy_terms = get_terms(
    ['my_taxonomy'],
    ['orderby' => 'count', 'hide_empty' => false, 'order' => 'DESC', 'pad_counts' => true]
);
/* Assuming you have at least one term, this will show you 
   the number of objects that use your most popular term. */
echo $my_taxonomy_terms[0]->count; 

出典: ここ

0
George

与えられた1つまたは複数の用語とその子から投稿数を取得する機能

子カテゴリを含むカテゴリ内の投稿数をカウントします

0
Abdo-Host