Verificar si existen entradas en una categoría de tipo de contenido personalizado, fuera del bucle

14 feb 2013, 18:29:34
Vistas: 20.6K
Votos: 2

Estoy construyendo una navegación, fuera del bucle principal, que incluye menús desplegables. Tengo un tipo de contenido personalizado llamado 'Events', que tiene sus propias categorías. Me gustaría que hubiera un desplegable si hay entradas dentro de ese tipo de contenido personalizado y categoría, pero no estoy seguro de qué funciones debería usar para determinar esto...

Tengo...

$hasposts = get_posts('post_type=Events&category=40');
if($hasposts) {
    ..// mostrar el menú desplegable
} 

¿Debería estar usando get_posts()? Todo lo que estoy obteniendo devuelve un array vacío, pero sé que algunas de esas categorías incluyen entradas...

Muchas gracias, WA.

0
Todas las respuestas a la pregunta 4
7

Todo se reduce a WP_Query al final, incluso si usas get_posts, aquí está mi versión modificada:

$hasposts = get_posts('post_type=sc-events&category=40');
if( !empty ( $hasposts ) ) {
    ..// mostrar el menú desplegable
}

o

$query = new WP_Query(array(
    'post_type' => 'sc-events',
    'category' => 40
));
if( $query->have_posts() ){
    echo 'tenemos publicaciones';
} else {
    echo 'no se encontraron publicaciones';
}

Aunque esto funcionará, hay una alternativa inspirada en tu propia respuesta que usa el slug de la categoría en lugar de su ID:

$term = get_term_by('name', 'como se llame la categoría 40', 'category');
if($term != false ){
    if($term->count > 0 ){
        // tenemos publicaciones
    }
}
14 feb 2013 19:01:03
Comentarios

el tipo de publicación 'Events' tiene su propia taxonomía, por lo que el ID de la categoría es específico solo para este tipo de contenido personalizado. Estoy de acuerdo con la codificación directa, pero estoy modificando el código de otra persona. Sin embargo, la primera solución que sugeriste sigue devolviendo un array vacío, incluso cuando hay publicaciones en esa categoría. Y la segunda sugerencia... es más compleja de lo que buscaba porque en realidad no voy a mostrar nada de esa consulta. Solo necesito verificar si hay publicaciones en la categoría. Agradezco mucho la ayuda.

RCNeil RCNeil
14 feb 2013 19:07:38

la segunda solución es idéntica a la primera, es lo que get_posts hace internamente, y significan exactamente lo mismo y funcionan exactamente igual. Solo porque hiciste una consulta, no significa que tengas que hacer el loop

Tom J Nowell Tom J Nowell
14 feb 2013 19:09:31

Además, si tienes una taxonomía personalizada, ¿por qué estás usando 'category=40' y no 'customtaxonomyname=40'?

Tom J Nowell Tom J Nowell
14 feb 2013 19:09:56

gracias por la información. En realidad no tiene una taxonomía, ahora que estoy revisando el archivo functions.php. Está utilizando Categorías de Tipos de Entradas. Entonces, incluso con todo eso dicho, ¿por qué alguna de las soluciones me devuelve un array vacío, incluso si solo consulto por el número de Categoría, y no lo relaciono con tipos de entradas particulares? ¿Es eso relevante?

RCNeil RCNeil
14 feb 2013 19:23:44

Esto sugiere falta de información, ¿puedes publicar el código de registro para tu tipo de entrada?

Tom J Nowell Tom J Nowell
14 feb 2013 19:34:42

De nuevo... no es mi código, pero el desarrollador utilizó un plugin http://wordpress.org/extend/plugins/types/ para desarrollar estos.

RCNeil RCNeil
14 feb 2013 19:44:46

continuemos esta discusión en el chat

RCNeil RCNeil
14 feb 2013 19:49:14
Mostrar los 2 comentarios restantes
0

Si deseas obtener un array con todos los términos dentro de tu taxonomía personalizada, con la condición adicional de que contengan al menos una publicación, esta es la función que estás buscando:

get_terms(
    'group',
    array(
        'hide_empty' => true
    )
);

Esto recuperará información sobre los términos, no sobre las publicaciones en sí mismas. Lo único que sabes sobre las publicaciones en este escenario es que existen dentro de esos términos, nada más. Si los menús desplegables mostrarán algún tipo de información sobre las publicaciones, quizás necesitarás algo diferente a lo anterior. De lo contrario, get_terms es la función que estás buscando.

14 feb 2013 19:21:05
1

Pude realizar esta verificación condicional mediante el siguiente código -

if (get_category('40')->category_count > 0) {
    ..//mostrar el menú desplegable
}
14 feb 2013 19:24:46
Comentarios

Esto fallará si el término 40 se elimina o su ID cambia.

Tom J Nowell Tom J Nowell
14 feb 2013 19:34:05
0

No hay necesidad de devolver el objeto completo de get_posts, puedes optimizar mejor el rendimiento utilizando el parámetro fields para devolver solo los IDs.

$posts = get_posts( array(
    'post_type' => 'Events',
    'posts_per_page' => 1,
    'fields' => 'ids',
    'tax_query' => array(
        array(
            'taxonomy' => 'category',
            'field'    => 'term_id',
            'terms'    => array( '40' )
        ),
    ),
) );
if ( ! empty ( $posts ) ) {
    ..// mostrar el menú desplegable
}
4 ago 2015 23:54:10