我在wordpress中有一个自定义的侧边栏,这是sidebar.php中的工作代码:
if ( ! is_active_sidebar( 'sidebar-1' ) ) {
return;
}
?>
<aside id="secondary" class="sidebar-area widget-area">
<div class="sidebar-area-wrap">
<?php dynamic_sidebar( 'sidebar-1' ); ?>
</div>
</aside><!-- #secondary -->
我在functions.php(works)中添加了选项,所以现在的代码如下:
if ( ! is_active_sidebar( 'sidebar-1' ) ) {
return;
}
$swag_sidebar_location = get_theme_mod('swag_sidebar_location');
if (isset($swag_sidebar_location) && $swag_sidebar_location=='') {
$swag_sidebar_location ='sidebar-location-none';
}
?>
<?php
if (isset($swag_sidebar_location) && $swag_sidebar_location=='sidebar-location-right' || $swag_sidebar_location=='sidebar-location-left') {
echo '
<aside id="secondary" class="sidebar-area widget-area">
<div class="sidebar-area-wrap">
' . dynamic_sidebar( "sidebar-1" ) . '
</div>
</aside>
';
}
?>
问题在于窗口小部件出现在标签的外部和之前,数字“ 1”出现在标签内部。
我猜问题出在这里:' . dynamic_sidebar( "sidebar-1" ) . '
我不知道php,只是想弄清楚。我该如何解决?
编辑:HTML如下所示的示例:
<section id="pages-2" class="widget">xxxxxx</section>
<section id="pages-2" class="widget">xxxxxx</section>
<section id="pages-2" class="widget">xxxxxx</section>
<section id="pages-2" class="widget">xxxxxx</section>
<aside id="secondary" class="sidebar-area widget-area sidebar-location-right"> <div class="sidebar-area-wrap"> 1 </div> </aside>
与其看起来像这样不正确:
<aside id="secondary" class="sidebar-area widget-area sidebar-location-right">
<div class="sidebar-area-wrap">
<section id="pages-2" class="widget">xxxxxx</section>
<section id="pages-2" class="widget">xxxxxx</section>
<section id="pages-2" class="widget">xxxxxx</section>
<section id="pages-2" class="widget">xxxxxx</section>
</div>
</aside>
编辑:根据要求,我在functions.php中注册侧边栏代码
function swagger_widgets_init()
{
register_sidebar(array(
'name' => esc_html__('Sidebar', 'swagger'),
'id' => 'sidebar-1',
'description' => esc_html__('Add widgets here.', 'swagger'),
'before_widget' => '<section id="%1$s" class="widget %2$s">',
'after_widget' => '</section>',
'before_title' => '<h2 class="widget-title"><span class="widget-title-span">',
'after_title' => '</span></h2>'
));
}
add_action('widgets_init', 'swagger_widgets_init');
答案 0 :(得分:3)
好的旧版Wordpress及其“回显功能” 。
dynamic_sidebar()
不是return
值; echo
是一个。这使得它不适合在字符串中串联,因为在字符串评估期间,其结果将echo
进行处理,甚至在创建字符串之前将其发送到输出缓冲区。
不幸的是,Wordpress没有提供此功能的get_*
版本来返回字符串(但请参阅https://core.trac.wordpress.org/ticket/13169)。
执行三个单独的调用,而不是进行串联。例如...
echo '<aside id="secondary" class="sidebar-area widget-area"><div class="sidebar-area-wrap">';
dynamic_sidebar( "sidebar-1" );
echo '</div></aside>';
您也可以使用单个echo
语句,但不要串联,而是将几个逗号分隔的参数传递给它,例如
echo '<aside id="secondary" class="sidebar-area widget-area"><div class="sidebar-area-wrap">',
dynamic_sidebar( "sidebar-1" ),
'</div></aside>';
另一种选择是坚持使用if
条件包装的原始HTML和PHP混合格式。例如
if (isset($swag_sidebar_location) && $swag_sidebar_location=='sidebar-location-right' || $swag_sidebar_location=='sidebar-location-left') : ?>
<aside id="secondary" class="sidebar-area widget-area">
<div class="sidebar-area-wrap">
<?php dynamic_sidebar( 'sidebar-1' ) ?>
</div>
</aside>
<?php endif ?>
请参见http://php.net/manual/control-structures.alternative-syntax.php