动态侧边栏呈现在我想要的另一个位置

时间:2019-08-13 作者:Aaron Nusselbaum

我正在尝试包含动态侧栏来解压主题。我创建了子模板,然后创建了所有文件,现在我有了一段显示内容和侧栏区域的代码。

在里面functions.php 我创建了动态侧栏:

add_action( \'widgets_init\', function () {
    $args = array(
        \'name\'          => __( \'Sidebar Messages Single\', \'uncode\' ),
        \'id\'            => \'sidebar-messages-single\', 
    \'description\'   => \'\',
        \'class\'         => \'dynamic-widget\',
    \'before_widget\' => \'<li id="dynamic-sidebar" class="widget">\',
    \'after_widget\'  => \'</li>\',
    \'before_title\'  => \'<h2 class="widgettitle">\',
    \'after_title\'   => \'</h2>\'
    ); 

    register_sidebar( $args );
});
然后在single-portfolio.php 我正在尝试包括那个侧边栏。


$sidebar_widgets = is_active_sidebar( \'sidebar-messages-single\' ) ? dynamic_sidebar( \'sidebar-messages-single\' ) : null;

$the_content = \'<div class="row-container">
    <div class="row row-parent\' . $row_classes . $limit_content_width . \'">
        <div class="row-inner">
            \' . (($layout === \'sidebar_right\') ? $main_content : \'\') . \'
            <div class="col-lg-\' . $sidebar_size . \'">
                <div class="uncol style-\' . $portfolio_style . $expand_col . $sidebar_padding . (($sidebar_fill === \'on\' && $portfolio_bg_color !== \'\') ? \'\' : $sidebar_sticky) . \'">
                    <div class="uncoltable\' . (($sidebar_fill === \'on\' && $portfolio_bg_color !== \'\') ? $sidebar_sticky : \'\') . \'">
                        <div class="uncell\' . $sidebar_inner_padding . \'">
                            <div class="uncont">
                                <div>
                                    \' . $sidebar_widgets . \'
                                </div>
                                \' . $footer_content . \'
                            </div>
                        </div>
                    </div>
                </div>
            </div>
            \' . (($layout === \'sidebar_left\') ? $main_content : \'\') . \'
        </div>
    </div>
</div>\';
在我看来,一切都很好,但当我渲染页面时,我得到了这个结果。

enter image description here边栏应该呈现的位置I get int(一)。而侧边栏是在另一个地方渲染的。

起初我以为它是通过JavaScript操纵DOM的,但当我调试并禁用JS时,它的工作原理是一样的。

此外,当我将普通字符串添加到<div> 旁边的变量$sidebar_widget. 字符串呈现在正确的位置。

非常感谢您的帮助!

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

你不应该保存dynamic_sidebar 因为它总是回显小部件。以下操作应该有效。

<?php

echo \'<div class="row-container">
<div class="row row-parent\' . $row_classes . $limit_content_width . \'">
    <div class="row-inner">\';
     if(($layout === \'sidebar_right\') && is_active_sidebar( \'sidebar-messages-single\' )) {
        dynamic_sidebar( \'sidebar-messages-single\' );
     }
      echo \'<div class="col-lg-\' . $sidebar_size . \'">
            <div class="uncol style-\' . $portfolio_style . $expand_col . $sidebar_padding . (($sidebar_fill === \'on\' && $portfolio_bg_color !== \'\') ? \'\' : $sidebar_sticky) . \'">
                <div class="uncoltable\' . (($sidebar_fill === \'on\' && $portfolio_bg_color !== \'\') ? $sidebar_sticky : \'\') . \'">
                    <div class="uncell\' . $sidebar_inner_padding . \'">
                        <div class="uncont">
                            <div>\';
                                 if(is_active_sidebar( \'sidebar-messages-single\' )) {
                                     dynamic_sidebar( \'sidebar-messages-single\' );
                                 }
                               echo \'</div>
                            \' . $footer_content . \'
                        </div>
                    </div>
                </div>
            </div>
        </div>\';
         if(($layout === \'sidebar_left\') && is_active_sidebar( \'sidebar-messages-single\' )) {
            dynamic_sidebar( \'sidebar-messages-single\' );
         }
    echo \'</div>
</div>
</div>\';

SO网友:Aaron Nusselbaum

Solution for someone have to use variable

感谢主题how do I get_sidebar into a varaible?

我将代码更改为:

...
<div class="uncont">
ob_start();
if(is_active_sidebar( \'sidebar-messages-single\' )) {
    dynamic_sidebar( \'sidebar-messages-single\' );
}
$the_content .= ob_get_contents();
ob_end_clean();
</div>
...
我知道这不是一个优雅的解决方案,但如果有人必须快速修复第三方主题(如Uncode),这是一种方法。

相关推荐

Adding Multiple Sidebars

大家好,我想向我的wordpress站点添加多个侧栏。我目前在函数中注册了两个侧栏。php类似:function themename_widgets_init() { register_sidebar( array( \'name\' => __( \'Sidebar\', \'themename\' ), \'id\' => \'sidebar-1\', \'des