Afficher des articles en dehors de WordPress

Il est possible d’afficher du contenu en dehors du site . Ici, on ne part pas d’une URL amicale, hélas. On instancie un objet WP_Query, en passant à son constructeur un tableau contenant les sélecteurs qui devront s’appliquer au moteur de routing. Il existe entre le format du permalien et le tableau de sélecteurs un certain fossé : celui de la Regex caractérisant la route. Dans les lignes qui suivent, la principale difficulté est de définir ce tableau…

Le seul point d’adhérence avec l’arborescence sur disque du CMS se situe au niveau du fichier wp-load.php. Référencer ce fichier permet d’exploiter de nombreuses possibilités du CMS.

require($_SERVER['DOCUMENT_ROOT'] . '/wp-load.php');
$args = array( 'cat' => 3, // Only source posts from a specific category
    'posts_per_page' => 2 // Specify how many posts you'd like to display
);

La classe WP_Query est la classe qui supporte la résolution des routes. C’est probablement la classe la plus importante du CMS, pour quiconque souhaitant développer sur la base de ce CMS. Dans ce premier bloc de code, l’objet en question va transformer le tableau de sélecteurs en une requête SQL, et récupérer de la base de données les articles (ou des entités de tout autre type…) correspondant à cette requête.

$posts = new WP_Query($args);

if ($posts->have_posts()) {
    while ($posts->have_posts()) {
        $posts->the_post();

Ensuite, nous avons la partie HTML de l’affichage. Aucune des méthodes relatives au contenu ne référence d’objet, car le contenu en cours de traitement est un objet global.



<li>
    <?php if (has_post_thumbnail()) { ?>
        <span class="post_thumbnail"><?php the_post_thumbnail(); ?></span>
    <?php } ?>
        <span class="post_title"><?php the_title(); ?></span>
        <span class="post_content"><?php echo do_shortcode(get_post()->post_content);
        ?></span>
    <span class="post_time">Posted on <?php the_time('l jS F, Y') ?></span>
    <?php the_excerpt(); ?>
</li>


Cela oblige à réinitialiser le contexte à la fin du traitement…

} } else { echo 'There are no posts available !'; }

wp_reset_postdata();

Bref, le hack ici réside dans la classe WP_Query. Les routes étant shuntées (en effet, aucune QueryString n’est fournie au constructeur…), il est nécessaire de connaître le tableau $args que l’on injecte dans l’objet (ça ne se devine pas toujours…). Il est donc parfois nécessaire d’avoir recours à un IDE pour progresser en pas à pas dans les méthodes de la classe WP_Query, qui embarque une très grande complexité…

Add a Comment

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

31 − = 27