WordPress obtener get_posts por categoría
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?

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

<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

¿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.

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

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 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 :)
