编辑:此短代码在任何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输出:
插图:
最合适的回答,由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()
获取捕获的输出,在本例中,该输出在函数末尾返回。