¿Cómo se conecta WP_Query a WP_Post en The Loop?

2

Este código funciona, y quiero entender por qué.

Así que creé el objeto de la clase WP_Query y usé las funciones have_posts() y the_post() en un bucle while.

La pregunta es: ya que $post->ID es un dato en una matriz basado en la clase WP_Post ¿Esto significa que el objeto instanciado de la clase WP_Post está dentro del objeto instanciado de la clase WP_Query ?

¿Puede un objeto estar dentro de otro? ¿O me estoy perdiendo algo?

        $the_query = new WP_Query( $args );     
        if ( $the_query->have_posts() ) : ?>
            <?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
                <?php echo '<p>' .$post->ID   .'</p>';?>

            <?php endwhile; ?>
            <?php wp_reset_postdata(); ?>       
        <?php else : ?>
            <p>No-data!</p>
        <?php endif; ?>
    
pregunta john-thomas 25.01.2017 - 12:20

2 respuestas

5

Sí, un objeto que contiene otros objetos es "natural". Un objeto House contiene una matriz de objetos Furniture en su propiedad $furnitures ... Como en nuestro caso ... WP_Query contiene una matriz de WP_Post en su propiedad $posts ... A < a href="https://en.wikipedia.org/wiki/One-to-many_(data_model)"> relación uno a varios . Esta es una Aggregation .

OOP tiene que ver con el modelado programático de las cosas. Estas cosas son:

  • Desde el contexto del sistema, datos y proceso .
  • Del contexto del mundo real, entidad y lógica .

Estos 2 contextos son relacionales. Los datos se definen por su entidad y el proceso se definen por su lógica . Estos 2 contextos se pueden transmutar en un patrón de programación común: OOP ...

El objeto WP_Post es una entidad que se mantiene y define por - sus datos . Es lo que llamamos un objeto de modelo de dominio . Sin embargo, como no incluye ninguna Lógica de dominio , los diseñadores de diseño pueden llamarlo Objeto de Modelo de Dominio Anémico en su lugar.

El objeto WP_Query es un proceso (servicio). De hecho, está definido por el dominio lógica de nuestro objeto WP_Post con, por ejemplo:

$the_query->have_posts();
$the_query->the_post();

El WP Loop en sí mismo recorre el WP_Query::$posts y se encarga de cambiar el contexto ( global $post object).

Desde dentro de The Loop:

  • WP_Query::the_post() inicializa global $post . Luego, puede acceder a los datos $post a través de, por ejemplo, get_the_ID() o $post->ID .

  • WP_Query::have_posts() verifica si hay otros WP_Query::$posts para iterar.

respondido por el ClemC 22.08.2017 - 16:39
-1

Puede utilizar get_the_ID () , recupera el ID del elemento actual en el bucle de WordPress:

$the_query = new WP_Query( $args );
if ( $the_query->have_posts() ) : ?>
    <?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
        <?php echo '<p>' . get_the_ID() .'</p>';?>

    <?php endwhile; ?>
    <?php wp_reset_postdata(); ?>
<?php else : ?>
    <p>No-data!</p>
<?php endif; ?>
    
respondido por el Tunji 25.01.2017 - 12:34

Lea otras preguntas en las etiquetas