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->ID
est 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; ?>
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:
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.