wp-query – ¿Cómo restablece reset_postdata la publicación del bucle de consulta principal?

Pregunta:

¿Cómo funciona reset_postdata ? Los doctores dicen:

restaurar la variable $ post global del bucle de consulta principal después de un bucle de consulta secundario usando el nuevo WP_Query

Pero en la clase, toma la publicación "actual" de la instancia actual de WP_Query y la establece como $post global. Entonces, ¿cómo restaura la publicación del bucle de consulta principal?

La clase WP_Query .

Respuesta:

WP_Query::reset_postdata() establece la variable de publicación global ( $GLOBALS['post'] === $post ) en la publicación actual en el bucle de la instancia actual de WP_Query .

public function reset_postdata() {
    if ( ! empty( $this->post ) ) {
        $GLOBALS['post'] = $this->post;
        $this->setup_postdata( $this->post );
    }
}

Lo que eso significa es que, si ejecuta una consulta personalizada en una página, $post mantendrá la última publicación en el ciclo de esa consulta personalizada. Que puedes ponerte a prueba añadiendo

?><pre><?php var_dump($post); ?></pre><?php 

directamente después del ciclo de su consulta personalizada.

Lo mismo es cierto para la consulta principal después del ciclo, $post contendrá la última publicación de la consulta principal y la primera publicación en el ciclo antes del ciclo.

Aquí hay una prueba simple para probar el $post global. Puede agregar esto a su archivo de funciones y cargar cualquier página en su sitio

add_action( 'wp_head', function()
{
    global $post;
    ?><pre><?php var_dump($post->ID); ?></pre><?php
}):
add_action( 'wp_footer', function()
{
    global $post;

    ?><pre><?php var_dump($post->ID); ?></pre><?php 

    $q = new WP_Query( 'posts_per_page=3' );
    while ( $q->have_posts() ) {
        $q->the_post();

        ?><pre><?php var_dump($post->ID); ?></pre><?php 
        the_title();

    }   

    ?><pre><?php var_dump($post->ID); ?></pre><?php 
    wp_reset_postdata();
    ?><pre><?php var_dump($post->ID); ?></pre><?php 
});

Entonces, ¿cómo restaura la publicación del bucle de consulta principal?

Eso se hace llamando a wp_reset_postdata() que restablece la $post global a la publicación actual en el bucle de la consulta principal. Esta suele ser la primera de la última publicación, dependiendo de si agrega su consulta personalizada antes o después del ciclo de consulta principal.

wp_reset_postdata() cómo lo hace wp_reset_postdata()

function wp_reset_postdata() {
    global $wp_query;

    if ( isset( $wp_query ) ) {
        $wp_query->reset_postdata();
    }
}

Como puede ver, wp_reset_postdata() es solo un contenedor para WP_Query::reset_postdata() . La parte importante aquí es que es un contenedor para el método del objeto de la consulta principal, $wp_query->reset_postdata(); .

Recuerde, la consulta principal también usa WP_Query . Así es como se configura el objeto de consulta principal

/**
 * WordPress Query object
 * @global WP_Query $wp_the_query
 * @since 2.0.0
 */
$GLOBALS['wp_the_query'] = new WP_Query();

/**
 * Holds the reference to @see $wp_the_query
 * Use this global for WordPress queries
 * @global WP_Query $wp_query
 * @since 1.5.0
 */
$GLOBALS['wp_query'] = $GLOBALS['wp_the_query'];

Entonces, lo que hace wp_reset_postdata() es, toma la publicación actual en el objeto de consulta principal y la establece como $post global, y así es como WP_Query::reset_postdata() establece $post en la publicación actual de la consulta principal

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top

web tasarım