WordPress: ¿Cómo filtrar publicaciones por categoría usando $wp_query?

2 minutos de lectura

avatar de usuario
codificador de niños

Creé un tema personalizado en WordPress con una página principal estática y sin configuración de página Ajustes > Ajustes de lectura > Pantallas de la página principal como una página de publicaciones. Sin embargo, me gustaría mostrar publicaciones según sus categorías en todo el sitio en diferentes páginas estáticas. Por lo tanto, nunca declararé una página de índice de publicaciones a través de la consola. Entonces uso la función $wp_query.

¿Cómo puedo agregar un filtro a este script que solo muestre publicaciones en la categoría “manzanas” (por ejemplo)? En este momento, este script muestra todas las publicaciones independientemente de la categoría.

<?php
    $temp = $wp_query;
    $wp_query = null;
    $wp_query = new WP_Query();
    $wp_query->query('showposts=1' . '&paged='.$paged);
    while ($wp_query->have_posts()) : $wp_query->the_post();
?>

<h2><a href="https://stackoverflow.com/questions/41886528/<?php the_permalink(); ?>" title="Read"><?php the_title(); ?></a></h2>
<?php the_excerpt(); ?>
<?php the_date(); ?>

<?php endwhile; ?>

<?php if ($paged > 1) { ?>
    <p><?php previous_posts_link('Previous page'); ?>
    <?php next_posts_link('Next page'); ?></p>
<?php } else { ?>
    <p><?php next_posts_link('Next page'); ?></p>
<?php } ?>

<?php wp_reset_postdata(); ?>

tienes que usar category_name (cadena – categoría de uso slug) o cat
(int – use la identificación de la categoría), para obtener publicaciones por categoría en WP_Query::query().

Aquí hay un ejemplo:

$category_name="apples"; //replace it with your category slug
$temp = $wp_query;
$wp_query = null;
$wp_query = new WP_Query();
$wp_query->query('showposts=1' . '&paged=' . $paged . '&category_name=" . $category_name);
//...
//...

¡Espero que esto ayude!

Elimine su primer bloque php y reemplácelo con este

<?php
$args = array (
    "showposts' => '1',
    'category_name' => 'apples',
    'paged' => $paged
);
$the_query = new WP_Query( $args );

if ( have_posts() ) : while ( $the_query->have_posts() ) : $the_query->the_post();
?>

Para más información https://codex.wordpress.org/Class_Reference/WP_Query#Category_Parameters

¿Ha sido útil esta solución?