it-swarm.com.de

Kombination von Shortcode und get_template_part

Ich verwalte eine WordPress-Site und habe ein Template-Teil erstellt, das ich normalerweise unter dem Inhalt einfüge.

    <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>

Jetzt versuche ich, dies zwischen die Inhalte zu setzen, also habe ich überlegt, einen Shortcode zu verwenden

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

Jedes Mal, wenn ich [Produkte] poste, erwarte ich, dass die Produkte dorthin gelangen. Wenn ich jedoch den obigen Code ausprobiere, wird das Produkt template_part ganz oben auf der Seite angezeigt, direkt unter dem Titel und direkt vor dem eigentlichen Inhalt.

Wenn ich jedoch den Shortcode bearbeite, um einfach Text zurückzugeben, wird der Text in der Mitte des Inhalts angezeigt.

Versteht jemand was los ist? Weil ich nicht ..

3
vlovsky

Versuche dies

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

Kleine Erklärung

pHP gibt Ihre Inhalte nur sofort aus, wenn es die Anweisung see print gibt. Was wir hier tun, ist, dass wir die gesamte Ausgabe im Puffer halten und nicht in gedruckter Form weitergeben, bis das Ganze abgeschlossen ist.

dann geben wir die endgültigen ganzen Ergebnisse (Ausgaben) zurück. Dies gibt uns die Kontrolle darüber, wann und wo Ausgaben gedruckt werden sollen.

Sie können es sogar in variable zuweisen und bei Bedarf zurückgeben

  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