Contar entradas en una taxonomía personalizada

15 dic 2012, 19:02:36
Vistas: 47.9K
Votos: 11

¿Hay alguna manera de contar todas las entradas publicadas de una taxonomía personalizada?

Mientras investigaba encontré este fragmento pero no logré hacerlo funcionar...

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 = 'TU-TAXONOMIA-PERSONALIZADA' 
        AND cat_terms.slug IN ('SLUG-TERMINO-1, SLUG-TERMINO-2')
    ";
return $wpdb->get_var($query);
0
Todas las respuestas a la pregunta 10
2

Utiliza una instancia de WP_Query para consultar la base de datos. http://codex.wordpress.org/Class_Reference/WP_Query

Para consultar la base de datos por taxonomías personalizadas, usa:

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

Para más detalles sobre las opciones disponibles, consulta: Parámetros de Taxonomía http://codex.wordpress.org/Class_Reference/WP_Query#Taxonomy_Parameters

Recupera publicaciones publicadas usando:

'post_status' => 'publish'

Usa found_posts para obtener el número de publicaciones:

$count = $query->found_posts;
15 dic 2012 19:32:09
Comentarios

No olvides wp_reset_postdata().

amarinediary amarinediary
20 mar 2021 14:08:05

@amarinediary en este caso realmente no necesitas resetear los datos del post. Solo necesitas hacer esto si haces un bucle de los posts y usas $query->the_post(); lo cual sobrescribirá el objeto global $post del bucle. Si solo estás obteniendo conteos, resetear los datos del post es solo computación adicional.

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

    //retorna el conteo
    $args = array(
      'post_type'     => 'product', //tipo de post, se usa 'product'
      'post_status'   => 'publish', // solo busca posts publicados
      'posts_per_page' => -1,  //mostrar todos
      'tax_query' => array(
        'relation' => 'AND',
        array(
          'taxonomy' => 'product_cat',  //nombre de la taxonomía aquí, se usa '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 abr 2013 14:46:14
0

Me gusta mucho la simplicidad de la respuesta de Varsha Dhadge, pero esa es para términos de taxonomía adjuntos a una publicación en particular. Para todo el sitio, usa get_terms de manera similar:

$custom_cats = get_terms(
    'custom_cat', // tu slug de taxonomía personalizada
    array(
        // obtén todos los términos, incluso los vacíos para ver qué elementos tienen 0
        'hide_empty' => false,
    )
);

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

El siguiente código obtendrá el conteo de artículos de una taxonomía específica

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

esto solo obtiene los términos que están asociados al $post->ID. mira mi solución usando get_terms en su lugar.

squarecandy squarecandy
14 jul 2020 04:01:14

Ten en cuenta que $term->count aún te da el conteo total de posts usando ese término en todo el sitio - pero solo obtendrás términos asociados al post actual. Quizás eso es lo que algunas personas buscan aquí, pero si quieres todos los términos de todo el sitio - que es la pregunta del OP - necesitas get_terms.

squarecandy squarecandy
14 jul 2020 04:07:50
1

Puedes hacer esto con el objeto actual usando get_queried_object()

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

De lo contrario, podrías ejecutar una segunda consulta innecesariamente, ¿cierto?

18 ago 2014 22:40:43
Comentarios

¡Brillante! :) Muchas gracias. Esto funciona cuando estoy dentro de una categoría. :)

Woppi Woppi
31 may 2017 12:50:08
0

WordPress añade un atributo de recuento a cada taxonomía y lo actualiza cada vez que se inserta o actualiza una nueva entrada. Esto evita tener que acceder a la base de datos nuevamente y realizar cálculos para obtener el número de entradas en la taxonomía.

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

Me enfrenté a esta situación en las plantillas de archivo de taxonomía (por ejemplo, taxonomy-taxname.php) para un sitio con un tipo de entrada personalizado y sus taxonomías de categoría/etiqueta asociadas. Quería mostrar en mi encabezado un conteo de cuántos elementos usaban la taxonomía.

En mis plantillas de archivo de taxonomía, necesitaba encontrar el término que representaba la taxonomía, luego pasarlo a una función para obtener el número de elementos del tipo de entrada personalizada que usaban ese término, esto desde la taxonomía de etiquetas:

// el término que necesitamos para esta taxonomía
$term_obj = get_queried_object();

// obtener el objeto del término
$term = get_term( $term_obj->term_id, 'taxname' );

// obtener el conteo de contenido con este término
$tax_count = get_tax_count('taxname', $term->slug, 'custom-post-type-name');

// la gramática cuenta
$plural = ( $tax_count == 1) ? '' : 's';

echo $tax_count . ' Elemento' . $plural . ' Etiquetado como "' . $term->name . '"';

La función para realizar el conteo utiliza WP_Query con un tax_query:

function tax_count ( $taxonomy, $term, $post_type ) {
    // encontrar el número de elementos en el tipo de entrada personalizada que usan el término en una taxonomía

    $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' => 'producto',
'post_status' => 'publicado',
'product_cat' => $catpage, // $catpage == el slug de tu categoría
'numberposts' => -1
);
echo $num = count( get_posts( $args ) );
24 ago 2016 16:23:48
Comentarios

Por favor, tómate un minuto y explica qué está haciendo tu código.

user9447 user9447
24 ago 2016 16:46:27
0
-1

He creado esta función para mi requisito y coincide exactamente con esta pregunta.

Obtener el Recuento de Publicaciones Dentro o Fuera de una Taxonomía

/**
 * Obtener el Recuento de Publicaciones/Tipo de Publicación en la Taxonomía dada
 *
 * @param  $post_type string cualquier tipo de publicación
 * @param  $taxonomy string cualquier taxonomía
 * @param  $is_exists string NOT EXISTS o EXISTS
 *
 * @return String Número de recuento de publicaciones
 */

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


/**
 * Ejemplo
 *
 * Tipo de publicación: download
 * Taxonomía: download_category
 * Existe: EXISTS
 */
echo prefix_get_post_count_in_taxonomy('download', 'download_category', 'EXISTS');
17 may 2021 12:33:41
0
-1

Este método que he seguido funcionó para mí.

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

foreach($terms as $term){
    echo $term->name .'----->'.$term->count.'<br>';  //aquí muestra el conteo de posts.
}
1 dic 2022 15:06:06