Contar publicaciones que tienen un término taxonómico específico adjunto

2

Al actualizar nuestra cartera, estoy buscando algo que muestre la cantidad de publicaciones en una categoría (actual) de un tipo de publicación.

Ejemplo: tengo una categoría con 'características'. Cada función tiene su propia descripción, aplicaciones relacionadas y página de publicaciones relacionadas con el blog

Estoy obteniendo la categoría actual con:

<?php $cat_id = get_query_var('cat'); ?>

y recibe publicaciones con:

 <?php query_posts("post_type=apps&cat=$cat_id&showposts=3");?>

¿Cómo es posible contar las publicaciones de post_type = apps y category = $ cat_id?

Lo siento por mi falta de experiencia con PHP / WP ... ¿Alguien sabe cómo hacer que estas dos cosas funcionen?

Gracias de antemano.

    
pregunta rwzdoorn 03.07.2013 - 13:40

4 respuestas

8

API pública para el rescate

category es una taxonomía que ya está incorporada. Por lo tanto, es muy fácil obtener su recuento de términos con get_terms( $tax, array( /* args */ ) );

$terms = get_terms( 'category', array(
    'fields' => 'count',
) );

Esto hará una consulta COUNT (*) bastante rápida para que no tengas que preocuparte por el rendimiento.

Solución alternativa

También puedes hacer una llamada normal a get_terms() y luego modificar el selects con el filtro:

// The core filter:
apply_filters( 'get_terms_fields', $selects, $args )

// Example callback:
add_action( 'get_terms_fields', 'wpse105174_get_terms_fields_cb', 10, 2 );
function wpse105174_get_terms_fields_cb( $selects, $args )
{
    return array( 't.term_id', 'COUNT(*)' );
}

... donde $selects es una matriz (que se implosionará en una cadena separada por comas).

Haciéndolo aún más rápido

Luego, podría modificar la consulta y restringirla a solo algunas categorías específicas (términos / taxones) con un WHERE t.slug = whatever

// The core filter:
apply_filters( 'terms_clauses', compact( $pieces ), $taxonomies, $args );

// Example callback:
add_action( 'terms_clauses', 'wpse105174_terms_clauses_cb', 10, 3 );
function wpse105174_terms_clauses_cb( $pieces, $taxonomies, $args )
{
    $pieces['where'] = " WHERE t.slug = whatever";
    // Or do some 'str_replace', 'preg_replace', whatever fits in here

    return $pieces;
}

También puede establecer $pieces['join'] = ''; si no necesita acceder a term_taxonomy -table.

Cachéla

Finalmente, podría utilizar la API de transitorios para guardar sus resultados (como matriz serializada) en la base de datos, por lo que no Tienes que consultar el recuento cada vez que lo necesites.

    
respondido por el kaiser 03.07.2013 - 14:02
2

El recuento de publicaciones se almacena en caché en el objeto de categoría para cosas como esta. En la categoría de archivo, algo como esto debería ser más fácil:

$category = get_queried_object();
// $category->count has count

Si está intentando recuperar todas las publicaciones en la categoría a través de ese bucle, debería usar posts_per_page=-1 , -1 para todos y posts_per_page es el reemplazo más reciente para showposts .

Para crear enlaces al archivo de categorías, puede utilizar la función get_category_link() .

    
respondido por el Rarst 03.07.2013 - 13:53
1

Al principio tuve algunos problemas, pero esto me funciona:

<?php $posts = get_posts("post_type=apps&cat=$cat_id"); 
$count = count($posts); 
 echo "$count"; 
?>
    
respondido por el rwzdoorn 03.07.2013 - 14:39
-1

Puede tener un recuento de publicaciones desde $ post variable después de query_posts como

query_posts("post_type=apps&cat=$cat_id&showposts=3");
echo $post->post_count;

Supongo que estás en una página de categoría ya que obtienes el ID de categoría de get_query_var ('cat'). Entonces, ¿qué es lo que realmente quieres para más de tres publicaciones? puedes explicarlo?

    
respondido por el Md Toufiqul Islam 03.07.2013 - 13:50

Lea otras preguntas en las etiquetas