web-dev-qa-db-fra.com

Comment WP_Query est-il connecté à WP_Post dans The Loop?

Ce code fonctionne et je veux comprendre pourquoi.

J'ai donc créé l'objet à partir de la classe WP_Query et utilisé les fonctions have_posts() et the_post() dans une boucle while.

La question est la suivante: puisque$post->IDest une donnée dans un tableau basé sur la classe WP_Post, est-ce que cela voudrait dire que l’objet instancié à partir de la classe WP_Post est à l’intérieur de l’objet instancié à partir de la classe WP_Query?

Un objet peut-il être l'un dans l'autre? Ou est-ce que je manque quelque chose?

        $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; ?>
2
john-thomas

Oui, un objet contenant d'autres objets est "naturel". Un objet House contient un tableau d'objets Furniture dans sa propriété $furnitures ... Comme dans notre cas ... WP_Query contient un tableau d'objets WP_Post dans sa propriété $posts ... A one relation -à-plusieurs . Ceci est un Agrégation .

OOP concerne la modélisation par programme. Ces choses sont:

  • Dans le contexte du système, data et process .
  • Dans le contexte du monde réel, entité et logique .

Ces 2 contextes sont relationnels. Le data est défini par son entité et le process est défini par son logic . Ces 2 contextes sont alors transmuables en un modèle de programmation commun - POO ...

L'objet WP_Post est une entité holding et est défini par - its data . C'est ce que nous appelons un objet de modèle Domain . Bien qu’étant donné qu’il n’inclut pas Domain Logic , les puristes de la conception l’appellent plutôt un objet de modèle de domaine Anemic .

L'objet WP_Query est un process (service). En fait, il est défini par le domaine logic de notre objet WP_Post avec par exemple:

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

Le WP _ Loop itère lui-même à travers le WP_Query::$posts et est chargé de la commutation de contexte (l'objet global $post).

De l'intérieur de la boucle:

  • WP_Query::the_post() initialise le global $post. Vous pouvez ensuite accéder aux données $post via, par exemple, get_the_ID() ou $post->ID.

  • WP_Query::have_posts() vérifie s'il y a d'autres WP_Query::$posts avec lesquels itérer.

5
ClemC