组合快捷码和GET_TEMPLATE_PART

时间:2016-01-05 作者:vlovsky

我管理一个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\\u部分会一直到页面顶部,就在标题的正下方和实际内容的正前方。

但是,当我编辑短代码只是返回一些文本时,文本确实会出现在内容的中间。

有人知道发生了什么吗?因为我没有。。

1 个回复
最合适的回答,由SO网友:WPTC-Troop 整理而成

试试这个

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

相关推荐

SHORTCODE_ATTS()中的$ATTS参数是什么?

这个WordPress developers reference page for shortcode_atts() 国家:$atts(array)(必选)用户在shortcode标记中定义的属性。但我不理解这个定义。例如,在WP Frontend Profile 插件:$atts = shortcode_atts( [ \'role\' => \'\', ], $atts ); 据我所知,shortcode\