Numără articolele dintr-o taxonomie personalizată

15 dec. 2012, 19:02:36
Vizualizări: 47.9K
Voturi: 11

Există vreo modalitate de a număra toate articolele publicate dintr-o taxonomie personalizată?

În timp ce căutam, am găsit acest fragment de cod dar nu am reușit să-l fac să funcționeze ...

global $wpdb;
$query = "
        SELECT COUNT( DISTINCT cat_posts.ID ) AS post_count
        FROM wp_term_taxonomy AS cat_term_taxonomy INNER JOIN wp_terms AS cat_terms ON
        cat_term_taxonomy.term_id = cat_terms.term_id
        INNER JOIN wp_term_relationships AS cat_term_relationships 
        ON cat_term_taxonomy.term_taxonomy_id = cat_term_relationships.term_taxonomy_id
        INNER JOIN wp_posts AS cat_posts 
        ON cat_term_relationships.object_id = cat_posts.ID
        WHERE cat_posts.post_status = 'publish' 
        AND cat_posts.post_type = 'post' 
        AND cat_term_taxonomy.taxonomy = 'TAXONOMIA-TA-PERSONALIZATA' 
        AND cat_terms.slug IN ('SLUG-TERMEN-1, SLUG-TERMEN-2')
    ";
return $wpdb->get_var($query);
0
Toate răspunsurile la întrebare 10
2

Folosește o instanță a clasei WP_Query pentru a interoga baza de date. http://codex.wordpress.org/Class_Reference/WP_Query

Pentru a interoga baza de date pentru taxonomii personalizate, folosește:

$query = new WP_Query( array( 'people' => 'bob' ) );

Pentru mai multe detalii despre opțiunile disponibile, vezi: Parametrii Taxonomiei http://codex.wordpress.org/Class_Reference/WP_Query#Taxonomy_Parameters

Recuperează articolele publicate folosind:

'post_status' => 'publish'

Folosește found_posts pentru a obține numărul de articole

$count = $query->found_posts;
15 dec. 2012 19:32:09
Comentarii

Nu uita să folosești wp_reset_postdata().

amarinediary amarinediary
20 mar. 2021 14:08:05

@amarinediary în acest caz de fapt nu este necesar să resetezi datele postării. Ai nevoie să faci asta doar dacă parcurgi postările și folosești $query->the_post();, ceea ce va suprascrie obiectul global $post al buclei. Dacă doar obții numărătoare, resetarea datelor postării este doar un calcul suplimentar.

noahmason noahmason
28 feb. 2023 21:34:33
0
function wp_get_productcat_postcount($id) {

    //returnează $count
    $args = array(
      'post_type'     => 'product', //tipul postării, am folosit 'product'
      'post_status'   => 'publish', // încerc să găsesc toate postările publicate
      'posts_per_page' => -1,  //afișează toate
      'tax_query' => array(
        'relation' => 'AND',
        array(
          'taxonomy' => 'product_cat',  //numele taxonomiei aici, am folosit 'product_cat'
          'field' => 'id',
          'terms' => array( $id )
        )
      )
    );

    $query = new WP_Query( $args);

    /*
    echo '<pre>';

    print_r($query->post_count);
    echo '</pre>';
    */

    return (int)$query->post_count;

}
24 apr. 2013 14:46:14
0

Îmi place foarte mult simplitatea răspunsului lui Varsha Dhadge, dar acesta se referă la termenii de taxonomie atașați unui anumit articol. Pentru întregul site, folosește get_terms într-un mod similar:

$custom_cats = get_terms(
    'custom_cat', // slug-ul taxonomiei personalizate
    array(
        // obține toți termenii, inclusiv pe cei goi, pentru a vedea care elemente au 0
        'hide_empty' => false,
    )
);

foreach ( $custom_cats as $term ) {
    echo $term->slug . ' - ' . $term->count . '<br>';
}
14 iul. 2020 03:59:46
2

Codul de mai jos va obține numărul de articole dintr-o anumită taxonomie

<?php 
  $terms = get_the_terms( $post->ID , 'your-taxonomy' );
  foreach ( $terms as $term ) {
    echo $term->count;
  } ?>
15 nov. 2017 14:29:48
Comentarii

acesta obține doar termenii atașați la $post->ID. vezi soluția mea folosind get_terms în loc.

squarecandy squarecandy
14 iul. 2020 04:01:14

Reține că $term->count încă îți oferă numărul total de postări care folosesc acel termen pe întregul site - dar vei obține doar termenii atașați la postarea curentă. Poate că asta caută unii oameni aici, dar dacă vrei toți termenii de pe întregul site - care este întrebarea OP - ai nevoie de get_terms.

squarecandy squarecandy
14 iul. 2020 04:07:50
1

Puteți face acest lucru cu obiectul curent folosind get_queried_object()

$posts = get_queried_object();
echo $posts->count;

Altfel, ați putea rula inutil o a doua interogare, nu-i așa?

18 aug. 2014 22:40:43
Comentarii

Minunat! :) Mulțumesc mult. Funcționează perfect când sunt în interiorul unei categorii. :)

Woppi Woppi
31 mai 2017 12:50:08
0

WordPress adaugă un atribut numărat pentru fiecare taxonomie și îl actualizează ori de câte ori un nou articol este inserat sau actualizat. Acest lucru se întâmplă pentru a evita necesitatea de a accesa din nou baza de date și de a face calcule pentru a obține numărul de articole din taxonomie.

echo $custom_tax_obj->count;
3 feb. 2014 00:06:43
0

Mă confrunt cu această situație în șabloanele de arhivă pentru taxonomii (de ex. taxonomy-taxname.php) pentru un site cu un tip de postare personalizat și taxonomii asociate de categorii/tag-uri. Am dorit să afișez în header un număr care să indice câte elemente folosesc taxonomia respectivă.

În șabloanele mele de arhivă pentru taxonomii, a trebuit să găsesc termenul reprezentat de taxonomie, apoi să îl transmit unei funcții pentru a obține numărul de elemente din tipul de postare personalizat care folosesc acel termen, în acest caz din taxonomia de tag-uri

// termenul de care avem nevoie pentru această taxonomie
$term_obj = get_queried_object();

// obținem obiectul termen
$term = get_term( $term_obj->term_id, 'taxname' );

// obținem numărul de conținuturi cu acest termen
$tax_count = get_tax_count('taxname', $term->slug, 'custom-post-type-name');

// gramatica contează
$plural = ( $tax_count == 1) ? '' : 's';

echo $tax_count . ' Element' . $plural . ' Etichetat "' . $term->name . '"';

Funcția care face numărătoarea folosește WP_Query cu un tax_query:

function tax_count ( $taxonomy, $term, $post_type ) {
    // găsește numărul de elemente din tipul de postare personalizat care folosesc termenul într-o taxonomie

    $args = array(
        'post_type' =>  $post_type,
        'posts_per_page' => -1,
        'tax_query' => array(
            array(
                'taxonomy' => $taxonomy,
                'field'    => 'slug',
                'terms'    => $term,
            ),
        ),
    );

    $tax_query = new WP_Query( $args );

    return ($tax_query->found_posts);

}
20 sept. 2018 08:19:18
1
-1
$args = array(
'post_type' => 'product',
'post_status' => 'published',
'product_cat' => $catpage, // $catpage == numele slug-ului categoriei tale
'numberposts' => -1
);
echo $num = count( get_posts( $args ) );
24 aug. 2016 16:23:48
Comentarii

Te rog să acorzi un minut și să explici ce face codul tău.

user9447 user9447
24 aug. 2016 16:46:27
0
-1

Am creat această funcție pentru cerința mea și se potrivește exact cu această întrebare.

Obține numărul de postări în sau în afara taxonomiei


/**
 * Obține numărul de postări/tipuri de postări într-o taxonomie dată
 *
 * @param  $post_type string orice tip de postare  
 * @param  $taxonomy string orice taxonomie
 * @param  $is_exists string NOT EXISTS sau EXISTS
 *
 * @return String Numărul de postări
 */

function prefix_get_post_count_in_taxonomy($post_type, $taxonomy, $is_exists = 'NOT EXISTS') 
{
    global $wpdb;

    $count = $wpdb->get_var(
        "
select COUNT(*) as post_count  
    FROM $wpdb->posts as A 
WHERE $is_exists (
    SELECT 1
    FROM  
         $wpdb->term_relationships as B
             INNER JOIN $wpdb->term_taxonomy as C
                 ON C.term_taxonomy_id = B.term_taxonomy_id
    WHERE C.taxonomy = '$taxonomy'
      AND B.object_id = A.ID
    )                                                    
  AND A.post_type = '$post_type'
  "
    );

    return $count;
}


/**
 * Exemplu
 *
 * Tip postare: download  
 * Taxonomie: download_category
 * Există: EXISTS
 */
echo prefix_get_post_count_in_taxonomy('download', 'download_category', 'EXISTS');
17 mai 2021 12:33:41
0
-1

Am urmat această metodă și a funcționat pentru mine.

 $terms = get_terms([
    'taxonomy' => 'types',
    'hide_empty' => false,
]);
$taxonomies = [];

foreach($terms as $term){
    echo $term->name .'----->'.$term->count.'<br>';  //aici afișează numărul de articole.
}
1 dec. 2022 15:06:06