web-dev-qa-db-fra.com

Combinaison de shortcode et de get_template_part

Je gère un site wordpress et ai créé une partie de modèle que je colle habituellement sous le contenu.

    <div class="posts-group">

        <h2>Featured store products</h2>

        <?php $catquery = new WP_Query( 'post_type=product&posts_per_page=4&orderby=Rand' );
        while($catquery->have_posts()) : $catquery->the_post();
        ?>
        <a href="<?php echo get_post_meta($post->ID,'PRODUCT-url', true);?>">
            <article class="post home-post homeproduct">
                    <div class="post-thumbnail-img">
                        <?php the_post_thumbnail('small-thumbnail'); ?>
                    </div>
                    <h2><?php the_title(); ?></h2>              
                    <p></p>
            </article>
        </a>

        <?php endwhile; ?>

</div>

Maintenant, j'essaie de mettre ceci entre le contenu, alors j'ai pensé à utiliser un shortcode

function get_products($atts) {
get_template_part('block-products-inline');
}
add_shortcode('products', 'get_products');

Maintenant, chaque fois que je poste des [produits], je pense que les produits y vont. Cependant, lorsque j'essaie le code ci-dessus, les produits template_part vont jusqu'au sommet de la page, juste en dessous du titre et juste avant le contenu.

Mais lorsque je modifie le shortcode pour simplement renvoyer du texte, celui-ci apparait au milieu du contenu.

Est-ce que quelqu'un comprend ce qui se passe? Parce que je ne ..

3
vlovsky

Essaye ça

function get_products($atts) {
  ob_start();
  get_template_part('block-products-inline');
  return ob_get_clean();
}
add_shortcode('products', 'get_products');

Petite explication

php affiche simplement votre contenu tout de suite lorsque vous voyez sa déclaration print. Ce que nous faisons ici est que nous conservons toutes les sorties dans une mémoire tampon et que nous ne les imprimons pas tant que tout n’est pas terminé.

nous renvoyons ensuite les résultats entiers finaux (sorties). Cela donne le contrôle de notre côté quand et où imprimer des sorties.

Vous pouvez même l'affecter à dans variable et les renvoyer si nécessaire

  ob_start();
  get_template_part('block-products-inline');
  $output =  ob_get_clean();
  //now you can return the output whenever you want with $output
12
WPTC-Troop