私はカテゴリから正しい投稿数を取得できない状況があります...そして私は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>
私は本当に選択肢がありません。何かアドバイス?
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;
それが私のような人に役立つことを願っています。
私は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番目のレベルからの数を合計します。あなたの機能はまさにそれをするようです。
試してみてください。
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;
}
警告:私はこれをテストしていません。
これは完璧な解決策ではありませんが、あなたの必要性に応じて、迅速な修正として働くかもしれません。
残念ながら、wordpressがこの数学を実行する方法は、私は "child_of"はあなたが行きたい方法ではないと思います。ただし、問題の投稿のカテゴリとしてcat1を選択することもできます。
まず、カテゴリ3と4の投稿を編集して、これから変更します。
cat1 []
cat2 [x]
cat3 [x]
cat4 []
これに:
cat1 [x]
cat2 [x]
cat3 [x]
cat4 []
それから、すべての子ではなくcat1の投稿数を数えるようにコードを修正します。
私は関連した問題を抱えていて、それをこのように解決しました。ユーザーがカテゴリを正しく選択しないと失敗するため、すべての状況で推奨されるわけではありません。ただし、正しく使用されれば、カウント問題は解決されます。
さらに - デフォルトですべての投稿がcat1の子である場合、この場合にユーザーを支援するために、すべての新しい投稿についてデフォルトのカテゴリを 'cat1'に変更できます。
Settings > Writing.
私の言うところでは、すべての投稿が第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;
}
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;
出典: ここ
与えられた1つまたは複数の用語とその子から投稿数を取得する機能