函数结果位于div之外

时间:2018-01-23 作者:Scott Agirs

编辑:此短代码在任何WP页面上使用并有效。/谢谢雅各布的来信。

我试图在一个短代码中显示一个侧栏。

然而,短码的结果从我试图显示它的包装元素(div)跳出。

屏幕截图中的红色矩形说明了该问题。

短代码源代码:

<?php

/*** Featured (1 post + sidebar) ***/

  function blog_loop_feat( $atts ) {
      extract( shortcode_atts( array(), $atts ) );
        echo \'<div class="clear"></div>\';
                        $args = array();
                        $splendid_query = new  WP_Query( $args );
        $output = \'<div class="row">\';// Row Open

        while ( $splendid_query->have_posts() ) : $splendid_query->the_post();
                      \'<div class="col-md-8 grid-entry-wrapper"> <!-- grid-entry-wrapper open -->
                            <!-- BLOG LOOP -->
                       </div><!-- grid-entry-wrapper close -->\';
        endwhile;
        wp_reset_query();

      $output .= \'<div class="col-md-4">\';

        if ( !function_exists(\'dynamic_sidebar\') || !dynamic_sidebar("Featured sidebar") ) :
        endif;

      $output .= \'</div></div>\'; // Row Close
      return $output;
  }
add_shortcode(\'blog_loop_feat\', \'blog_loop_feat\');
和功能。php代码段:

if ( function_exists(\'register_sidebar\') )
  register_sidebar(array(
    \'name\' => \'Featured sidebar\',
    \'before_widget\' => \'<div class = "widgetizedArea">\',
        \'meta\' => \'feat_widget\',
    \'after_widget\' => \'</div>\',
    \'before_title\' => \'<h3>\',
    \'after_title\' => \'</h3>\',
  )
);
HTML输出:enter image description here

插图:enter image description hereenter image description here

2 个回复
最合适的回答,由SO网友:Jacob Peattie 整理而成

你使用的是回音和回音的混合。

在这里,您可以通过回声开始:

echo \'<div class="clear"></div>\';
在这里,您将输出放入一个变量(正确):

$output = \'<div class="row">\';
在这里,您只需将内容写在引号中,而不回显或分配给变量:

\'<div class="col-md-8 grid-entry-wrapper"> <!-- grid-entry-wrapper open -->
     <!-- BLOG LOOP -->
</div><!-- grid-entry-wrapper close -->\';
短代码需要return 他们的全部产出。因此,您要么需要像第二个示例那样一直构建一个变量,要么使用输出缓冲来“捕获”输出以稍后返回。

下面是一个使用输出缓冲的示例:

function blog_loop_feat( $atts ) {
    $args = array();
    $splendid_query = new WP_Query( $args );
    ob_start();
    ?>

    <div class="clear"></div>

    <div class="row">
        <?php while ( $splendid_query->have_posts() ) : $splendid_query->the_post(); ?>
            <div class="col-md-8 grid-entry-wrapper"> <!-- grid-entry-wrapper open -->
                <!-- BLOG LOOP -->
            </div><!-- grid-entry-wrapper close -->
        <?php endwhile; wp_reset_query(); ?>

        <div class="col-md-4">
            <?php if ( ! function_exists(\'dynamic_sidebar\') || ! dynamic_sidebar("Featured sidebar") ) : endif; ?>
        </div>
    </div>

    <?php
    return ob_get_clean();
}
add_shortcode( \'blog_loop_feat\', \'blog_loop_feat\' );
ob_start() 开始捕获输出,并且ob_get_clean() 获取捕获的输出,在本例中,该输出在函数末尾返回。

SO网友:Dev

您还可以像这样使用关闭和打开PHP标记:

?>
\'<div class="col-md-8 grid-entry-wrapper"> <!-- grid-entry-wrapper open -->
<!-- BLOG LOOP -->
</div><!-- grid-entry-wrapper close -->\';
<?php

结束

相关推荐

Append HTML Using Shortcode

我写了一个WordPress插件,它有一个短代码。短代码位于WordPress页面上,该页面上有其他短代码。其他短代码输出HTML,我想将我的短代码中的HTML附加到该输出中。我想知道是否可以使用DOMDocument和getElementById来实现这一点。WordPress页面如下所示:[Shortcode #1] [Shortcode #2] [Shortcode #3] [date_info] 我的插件执行以下操作:function