web-dev-qa-db-fra.com

Quelle est la meilleure méthode pour injecter les publications entre les publications dans la boucle?

Je travaille sur mon tout premier projet WP.

J'ai un thème qui regroupe tous les articles de la page d'accueil - et je dois ajouter une annonce répétée tous les 5 à 6 articles.

Mon idée était de changer la requête de base de données qui répertorie les publications et d’ajouter la publicité toutes les boucles.

Quelqu'un peut-il m'indiquer où trouver la requête de base de données?

Ou pouvez-vous suggérer une solution plus élégante?

je vous remercie.

3
Stuart Hall

Probablement juste ajouter un compteur, montrer la publicité sur des multiples de 6.

Quelque chose comme

$count = 0;
$adEvery = 6;

if (have_posts()) :
    while (have_posts()) : the_post();

        // Individual Post

        $count++;
        if ($count%$adEvery == 0) { 
            // your ad
        } 
    endwhile;
else :
    // No Posts Found
endif;
2
David Sword

Phil Kurth a écrit un article informatif sur le fractionnement traitant la boucle WordPress à l’aide de la propriété current_post dans l’objet global $wp_query.

Ceci peut être appliqué à votre question et nous permet d’insérer proprement du contenu à n’importe quel point de la boucle.

La fonction est la suivante (place dans functions.php ou, si je préfère, dans un fichier de bibliothèque séparé ne gérant que les mods de requête):

/**
 * Returns the index of the current loop iteration.
 *
 * @return int
 */
function pdk_get_current_loop_index() {
    global $wp_query;
    return $wp_query->current_post + 1;
}

Ensuite, lors de la sortie de la boucle, si nous voulons injecter l’annonce après le 6ème post:

if ( have_posts() ) :
    while (
        have_posts() ) :
        the_post();

        get_template_part( 'content' );

        if ( pdk_get_current_loop_index() === 6 ) {
        ?>
            <div class="ad-mrec">
                <!-- Insert ad coder here -->
            </div>
        <?php
        }

    endwhile;
endif;

Si vous lisez l'article de Phil, vous pouvez également en faire plus avec cette fonction.

1
davemac