私はWordPressサイトを管理し、通常コンテンツの下に貼り付けるテンプレート部分を作成しました。
<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>
今、私はこれをコンテンツの中に入れることを試みているので、私はショートコードを使うことを考えました
function get_products($atts) {
get_template_part('block-products-inline');
}
add_shortcode('products', 'get_products');
今私が[products]を投稿するたびに、私はその商品がそこに行くことを期待しています。しかし、上記のコードを試すと、商品のtemplate_partは、ページの一番上、タイトルの真下、実際のコンテンツの直前まで表示されます。
しかし、単にテキストを返すようにショートコードを編集すると、そのテキストはコンテンツの中央に表示されます。
誰が何が起こっているのか理解していますか?そうじゃないから。
これを試して
function get_products($atts) {
ob_start();
get_template_part('block-products-inline');
return ob_get_clean();
}
add_shortcode('products', 'get_products');
ちょっと説明
phpはsee print文を実行するとただちにコンテンツを出力します。ここですることは、すべての出力をバッファに保持し、すべてが終了するまで出力を印刷しないことです。
それから我々は最終的な全体の結果(出力)を返しています。これにより、いつ、どこで出力を印刷するかを制御できます。
あなたはそれをvariable
に代入して必要なときにそれらを返すことさえできます
ob_start();
get_template_part('block-products-inline');
$output = ob_get_clean();
//now you can return the output whenever you want with $output