es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

El uso de una cadena de consulta en la URL hace que la consulta principal se comporte de manera incorrecta y que la paginación no funcione en WordPress.

Tengo una página de archivo de películas en la que presento todas las películas paginadas. En la barra lateral tengo géneros (taxonomía) para las películas. Cuando el usuario hace clic en uno, quiero que los resultados en la página se filtren según el género en el que hizo clic.

Mi forma de pensar me hizo hacer esto usando una cadena de consulta en la URL. Entonces, cuando el usuario hace clic en el género, solicita la misma URL (archivo para películas) pero agrega ?genre=SOMETHING. Luego, en el gancho pre_get_posts, tengo esta declaración if para modificar la consulta principal:

if(
!is_admin() &&
$query->is_main_query() &&
is_post_type_archive('movie') &&
get_query_var('genre')
)

Luego, después de eso, tengo un código como este para filtrar las películas por el género en el que hizo clic:

$taxonomyQuery = [
[
'taxonomy' => 'genre',
'field' => 'slug',
'terms' => get_query_var('genre'),
],
];
$query->set('tax_query', $taxonomyQuery);

Los enlaces de la barra lateral se construyen de la siguiente manera:



name; ?>

La taxonomía se crea con el nombre genre para que ese nombre se agregue automáticamente a query_vars.

Cuando abro la página de archivo de películas /movies/, obtengo resultados paginados y todo funciona bien. Pero una vez que hago clic en el género, obtengo esta ruta /movies/?genre=comedy. El pre_get_posts se activa y filtra las películas según el género seleccionado, pero la paginación no funciona. Incluso si configuro $query->set('posts_per_page', 1);, todavía obtengo más de un resultado devuelto por la consulta. El problema solo ocurre cuando se agrega la cadena de consulta ?genre=SOMETHING a la URL y no puedo entender por qué.

NOTA: Soy relativamente nuevo en el desarrollo de WordPress y realmente no sé si esta es la forma correcta de hacer este tipo de cosas.

¡Cualquier ayuda es apreciada!

Tags:  ,

Answer

  1. Avatar for davy.ai

    Cómo filtrar la página de archivo de películas de WordPress por género utilizando una cadena de consulta y paginación

    Si tienes una página de archivo de películas y quieres mostrar todas las películas en la página con paginación y permitir que los usuarios filtren las películas utilizando géneros (taxonomía) en la barra lateral, puedes usar una cadena de consulta en la URL.

    Primero, crea una taxonomía llamada ‘género’. Luego, agrega el siguiente código a tu archivo functions.php para modificar la consulta principal:

    if ( !is_admin() && $query->is_main_query() && is_post_type_archive( 'movie' ) && get_query_var( 'genre' ) ) {
        $taxonomyQuery = [
            [
                'taxonomy' => 'genre',
                'field' => 'slug',
                'terms' => get_query_var( 'genre' ),
            ],
        ];
        $query->set( 'tax_query', $taxonomyQuery );
    }
    

    Este código filtra las películas por el género en el que el usuario hizo clic en la barra lateral.

    Para construir los enlaces de la barra lateral, utiliza el siguiente código:

    <a href="<?php echo esc_url( add_query_arg( 'genre', $genre->slug ) ); ?>">
      <?php echo $genre->name; ?>
    </a>
    

    Este código agrega la cadena de consulta a la URL cuando el usuario hace clic en un género en la barra lateral.

    Sin embargo, si haces clic en un género y la URL cambia a “/movies/?genre=comedia”, la paginación puede no funcionar. Para solucionar esto, agrega el siguiente código antes del bucle:

    $paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
    $args = [
        'posts_per_page' => 1,
        'paged'          => $paged,
    ];
    $query = new WP_Query( $args );
    

    Este código establece el número de publicaciones por página en 1 y establece el número de página para la paginación.

    En resumen, utiliza una cadena de consulta para filtrar las películas por el género en el que el usuario hizo clic y establece el número de publicaciones por página y el número de página para la paginación.

Comments are closed.