¿Cómo puedo obtener el recuento de productos en cada categoría como el back-end de WooCommerce?

3 minutos de lectura

avatar de usuario
Ethan Clayton

Estoy construyendo un nuevo sitio y me siento bastante cómodo con Woocommerce. Solo necesito un truco rápido para obtener el recuento de productos en cada categoría. Ya estoy llamando a la categoría de cada producto, pero no puedo averiguar cómo obtener el recuento de productos de esa categoría.

Tengo un estilo de lista para mis productos (realmente actividades para un sitio de actividades). Mira la imagen.

Solo quiero hacer eco del recuento de “actividades” junto a la categoría. Así es como obtengo mi categoría:

echo $product->get_categories( ', ', '<span class="posted_in">' . _n( 'Category:', 'Categories:', sizeof( get_the_terms( $post->ID, 'product_cat' ) ), 'woocommerce' ) . ' ', '.</span>' );

Traté de obtener el conteo usando:

$numposts = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->posts WHERE post_status="publish"");
echo $numposts;

Pero está haciendo eco de un número extraño. Probé algunas variaciones de esa consulta, solicitando productos y demás.

[update]

Esto es lo que pude hacer:

<li><?php 
$cat1 = $product->get_categories( ', ', '<span class="posted_in">' . _n(     'Category:', 'Categories:', sizeof( get_the_terms( $post->ID, 'product_cat' ) ),  'woocommerce' ) . ' ', '.</span>' ); 
echo $cat1;
/* 
$args = array( 'taxonomy' =>  'product_cat' ); 
$terms = get_terms('product_cat', $args); 
echo count($terms);
*/ 
$args = array( 'post_type' => 'product',  'taxonomy' => $cat1[0] ); 
$loop = new WP_Query( $args );
while ( $loop->have_posts() ) : $loop->the_post(); 
    echo count( $loop->post->ID ) 
endwhile; 
wp_reset_query(); // Remember to reset 
?></li>

Pero en realidad cuenta todos los productos en todas las categorías en incrementos de “1”. Entonces, en lugar de hacer eco de “categoría: abc tiene “3” producto”, está haciendo eco de “categoría: abc tiene “1 1 1 1 1 1 1 “

Sé que hay un filtro simple que puedo hacer aquí, siento que estoy justo ahí.

  • Observaciones: 1) Uso único abierto <?php y cerca ?> etiquetas para separar PHP de HTML. No es un salto de línea. 2) Organiza tu código, para que no te vuelvas loco. Es mucho más fácil de depurar y leer. Ver estándares de codificación. 3) Uso var_dump y print_r para inspeccionar sus variables.

    – brasofilo

    13 de julio de 2013 a las 2:10

Ambas funciones get_term y get_terms devolverá objetos que ya contienen el recuento de categorías.

Si quieres recuperar todo Categorías de productos de WooCommerce e imprima su recuento de publicaciones:

$terms = get_terms( 'product_cat' );
// DEBUG
// var_dump( $terms ); 
foreach( $terms as $term ) 
{
    echo 'Product Category: '
        . $term->name
        . ' - Count: '
        . $term->count;
}       

Si quieres comprobar sólo uno categoría de la que previamente conoces el ID:

$term = get_term( 16, 'product_cat' ); // <--- tested in my system with this ID
echo 'Product Category: '
    . $term->name
    . ' - Count: '
    . $term->count;

avatar de usuario
Ethan Clayton

Ok, gracias por ponerme en el camino correcto, brasofilo, estoy seguro de que tengo alguna redundancia, pero esto me da lo que necesito.

<?php $cat1 = $product->get_categories( ', ', '<span class="posted_in">' . _n(       'Category:', 'Categories:', sizeof( get_the_terms( $post->ID, 'product_cat' ) ), 'woocommerce' ) . ' ', '</span>' ); 

//get the category ID and permalink
$term_list = wp_get_post_terms($post->ID,'product_cat',array('fields'=>'ids'));
$cat_id = (int)$term_list[0];
$term = get_term( $cat_id, 'product_cat' ); 

//echo the category, product count, and link
echo  $cat1 . '<a href="https://stackoverflow.com/questions/17559492/. get_term_link ($cat_id,"product_cat') .'>' . ' See all ' .   $term->count . ' Activities</a>';


?>

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad