Kategoriyadan va boladan postlar soni

Men kategoriyadan to'g'ri hisob raqamini topa olmaydigan vaziyatga keldim ... va men hamma narsani sinab ko'rdim, lekin wp_list_categoriesni yurituvchi bilan sozlashni istadim.

Shuning uchun ierarxiya toifasiga kiraman:

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

Barcha xabarlar cat2 va cat3-cat4 ostida. Men cat1-ni ko'rmoqchiman va post-xabarlarni ko'rsatishni xohlayman.

Quyidagi funktsiyani ishlatsam:

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

Men jami 16 sonini olaman. Ikkinchisini ikki marta hisoblaydigan haqiqiy miqdor ikki barobar.

Bundan oldin men:

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

Va foreach uchun qator ishlatilgan va hisoblash echo. Lekin u 0 ga qaytadi, albatta, chunki ota-ona mushuk ostida tanlangan postlar yo'q ...

wp_list_categories aslida to'g'ri qiymatni ko'rsatadi. Lekin men o'zimning murakkab htmlni olishim uchun uni yurish bilan kengaytira olmadim:

  • <?php if (function_exists('get_cat_icon_lite')) echo get_cat_icon_lite( $child->cat_ID );?><?php _e('Show All','medishop'); ?>

    <?php echo $child->name; ?>

    <?php echo wp_get_postcount($child->cat_ID); ?> <?php _e('products in this category','medishop'); ?>

  • 
    

    Men, albatta, variantlardan tashqariga chiqdim. Har qanday maslahat?

    5

    7 javoblar

    Daniel Llewellyn kodini va WordPressning "WP_Query" havolasini tekshirib, tax_query parametrida qator qatorlarni o'tkazishimiz kerakligini tushunib etdim. Aks holda, barcha hisob raqamlarini qaytarib beradi.

    Quyida biroz o'zgartirilgan kod mavjud:

    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;
    

    Umid qilamanki, menga o'xshaganga yordam beradi.

    9
    qo'shib qo'ydi
    Bu katta DBlar uchun juda xavflidir - 'nopaging' => true yozuvlari hisoblanmaydi! Aksincha, uni FALSE ga qo'ying va posts_per_page => 1 xabarlarni cheklab, keyin $ q-> found_posts deyiladi. joriy so'rov parametrlariga mos keladigan topilgan xabarlar soni "(hozirgi posts_per_pagedan qat'i nazar)
    qo'shib qo'ydi muallif jave.web, manba

    16 sonining umumiy sonini olaman. Buning aniq miqdorini ikki barobarga oshirish mumkin   

    count xususiyati ushbu turkumdagi xabarlarning sonini qaytaradi. Siz 16 ta xabarni olasiz, chunki bu xabarlarda cat3 yoki cat4 va ularga tayinlangan yuqori kategoriya ( cat2 ) bor. hisoblaydi.

    Ushbu funktsiyani wp_get_postcount ($ id_of_cat2) kabi ishlatgan holda, faqat hisoblash xususiyatini qaytaring:

    $term = get_term((int)$id, $taxonomy);
    
    if(!($term instanceof WP_Error))
      return (int)$term->count;
    
    // or show the error...
    return 0;
    

    (This is the same as $child->count in your code below)

    Agar siz ushbu kategoriya ierarxikasi bo'yicha hech qanday kod mavjud bo'lmasa, wp_get_postcount ($ id_of_cat1) kabi barcha cat1 unga tayinlangan xabarlar, keyin 2-darajadan hisoblarni qo'shing. Sizning funktsiyangiz xuddi shunga o'xshash ko'rinadi.

    4
    qo'shib qo'ydi
    Bu menga yordam bermaydi, nima bo'layotganini allaqachon bilaman. Ammo kodni ikki marta hisoblashni to'xtatolmayman.
    qo'shib qo'ydi muallif holmeski, manba
    O'X da aytganimdek, bu mening birinchi usulim edi. Lekin Cat1 ning unga tayinlangan xabarlari yo'qligi sababli, 0 ko'rinadi.
    qo'shib qo'ydi muallif holmeski, manba
    echo $ child-> count bilan echo wp_get_postcount ($ child-> cat_ID) kodini o'zgartirsangiz, to'g'ri raqamni olasizmi?
    qo'shib qo'ydi muallif onetrickpony, manba
    Agar siz cat1 ga xabar yuborishni xohlamasangiz, funktsiyangizdan foydalaning va count xususiyatidan foydalanadigan pastki toifalar uchun bevosita foydalaning
    qo'shib qo'ydi muallif onetrickpony, manba

    harakat qilib ko'ring:

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

    ogohlantirish: Men buni sinab ko'rmadim.

    2
    qo'shib qo'ydi
    Bundan tashqari, so'rovlar yo'lini tezroq qilish uchun 'fields' => 'ids' qo'shib qo'ydim.
    qo'shib qo'ydi muallif Bainternet, manba
    Ushbu kod OPning muammosini qanday qilib tuzatadi? Iltimos, javobingizga izoh bering
    qo'shib qo'ydi muallif user19726, manba

    Bu mukammal yechim emas, balki ehtiyojlaringizga qarab, tezkor tuzatish sifatida ishlaydi.

    Afsuski, WordPress bu matematik usulda ishlaydi, men "child_of" siz borish istagingiz deb o'ylamayman. Biroq, siz faqat cat1-ni ushbu xabarlarda bir toifa sifatida tanlashingiz mumkin.

    First, edit posts in Categories 3 & 4 and change from this:

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

    bunga:

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

    Keyin kodingizni tuzatib, uning barcha bolalarini emas, balki cat1dagi postlarni hisoblang.

    Men bilan bog'liq bo'lgan muammo yuzaga keldi va shu yo'l bilan hal qilindi. Har qanday holatda tavsiya etilmaydi, chunki foydalanuvchi toifadagi toifalarni tanlamasa, bu buziladi. Biroq, to'g'ri ishlatilgan va sizning hisoblash muammosini hal qiladi.

    Bunga qo'shimcha ravishda - agar barcha xabarlar cat1-ning bolalari sukut bo'lsa, bu holatda foydalanuvchilarga yordam berish uchun barcha yangi xabarlar uchun 'cat1' ga standart turkumni o'zgartirishingiz mumkin.

    Settings > Writing.
    
    1
    qo'shib qo'ydi
    xabarlar bir nechta toifaga ega bo'lishi mumkin. xabarlar cat1ga tayinlangan bo'lsa, mavzuingiz buziladi degan ma'noni anglatadimi?
    qo'shib qo'ydi muallif Mathieu Pagé, manba
    Xabarlarni cat1 ga ko'chira olmayman.
    qo'shib qo'ydi muallif holmeski, manba

    My understand is all the posts are assigned to third level category (i.e cat3 & and cat4) and to their immediate parent (i.e cat2). But the posts are not assigned to first level category (i.e cat1).

    Endi tushunchangiz to'g'ri bo'lsa, quyida kodni ishlatish bilan nima noto'g'ri ekanini ayta olasizmi? Yuqoridagi/birinchi darajali toifadagi xabarlarni hisoblashni xohlaysizmi?

    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
    qo'shib qo'ydi

    For those that are retrieving their taxonomies through get_terms(), you can pass the argument 'pad_counts' => true to add the children count into the parents.

    Misol uchun :

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

    Source: here

    0
    qo'shib qo'ydi

    Berilgan muddat yoki muddatlardan va ularning farzandlaridan postlarni hisoblash funktsiyasi

    Quyi turkumlarni o'z ichiga olgan kategoriyalarni sanab

    0
    qo'shib qo'ydi