WordPress obtener get_posts por categoría

30 jun 2015, 22:57:23
Vistas: 153K
Votos: 11

Tengo el siguiente fragmento de código:

$args = array(
    'posts_per_page'   => -1,
    'category'         => 7,
    'orderby'          => 'name',
    'order'            => 'ASC',
    'post_type'        => 'product'
);

$posts = get_posts($args);var_dump($posts);

Esto debería devolver un post que sé que está en la categoría, pero no lo hace. Si omito el argumento 'category', obtengo todos los productos, así que sé que esto normalmente debería funcionar. Si cambio la categoría a 1 y quito mi tipo de post personalizado (product), obtengo mis posts predeterminados.

No puedo ver qué está mal con esto. ¿Alguien puede identificar cuál es el problema?

3
Comentarios

¿No debería ser el nombre de la taxonomía en lugar de categoría?

Robert hue Robert hue
30 jun 2015 23:02:03

Lo intenté, pero no funcionó. Lo obtuve de la página del codex de WordPress, que parece respaldar mi enfoque, pero aún así no funciona: "Nota: El parámetro de categoría debe ser el ID de la categoría, no el nombre de la categoría."

Michiel Standaert Michiel Standaert
30 jun 2015 23:16:34

El menos1 (-1) en posts_per_page mostrará TODAS las publicaciones y tan pronto como omitas el CPT (Custom Post Type), WordPress "volverá" a las publicaciones regulares como ya descubriste por ti mismo.

Charles Charles
1 jul 2015 07:49:51
Todas las respuestas a la pregunta 2
0
24

Es muy probable que estés utilizando una taxonomía personalizada y no la taxonomía incorporada category. Si este es el caso, entonces los parámetros de categoría no funcionarán. Necesitarás una tax_query para consultar publicaciones de un término específico. (Recuerda, get_posts utiliza WP_Query, por lo que puedes pasar cualquier parámetro de WP_Query a get_posts)

$args = [
    'post_type' => 'product',
    'tax_query' => [
        [
            'taxonomy' => 'my_custom_taxonomy',
            'terms' => 7,
            'include_children' => false // Elimina si necesitas publicaciones de los términos hijos del término 7
        ],
    ],
    // Resto de tus argumentos
];

RECURSOS ADICIONALES

1 jul 2015 09:00:38
6
<ul>
    <?php
    $args = array( 'posts_per_page' => 5, 'offset'=> 1, 'category' => 1 );

    $myposts = get_posts( $args );
    foreach ( $myposts as $post ) : setup_postdata( $post ); ?>
        <li>
            <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
        </li>
    <?php endforeach; 
    wp_reset_postdata();?>
</ul>

Quizás esto te ayude.

Gracias

1 jul 2015 06:30:32
Comentarios

Sería genial alguna explicación.

Nilambar Sharma Nilambar Sharma
1 jul 2015 06:49:59

¿De qué 'post_type' obtendrá ahora los enlaces, 5 en tu caso? En mi opinión, él quiere el contenido de productos (según entiendo, un CPT) y nada de las publicaciones regulares.

Charles Charles
1 jul 2015 07:14:14

Pasa tu ID de categoría en los argumentos y de las publicaciones regulares obtendrás 5 posts.

Rohit Gilbile Rohit Gilbile
1 jul 2015 07:33:20

Lee su pregunta por favor, no siempre tengo la razón pero en este caso él quiere 'algo' de un Custom Post Type con el nombre Product.

Charles Charles
1 jul 2015 07:44:49

Charles tiene razón en este caso. Sé cómo obtener los datos una vez que tengo mis posts. El problema era que no estaba obteniendo mis custom posts :)

Michiel Standaert Michiel Standaert
1 jul 2015 11:56:31

@Rohitgilbile ¿cómo incluir la imagen destacada dentro del bucle foreach?

user2584538 user2584538
9 may 2018 13:11:25
Mostrar los 1 comentarios restantes