将小部件添加到一个HTML字符串

时间:2017-03-03 作者:Miguel Pinto

遵循我的my previous question, 我可以让我的皮肤覆盖我想从父级修改的功能。

该功能所做的基本上是为网站构建标题图像,我正试图在标题图像部分下面添加一个小部件区域。

类似这样:

<div id="header-text-nav-container" class="clearfix">
    //...
    <div id="wp-custom-header" class="wp-custom-header">
        <div class="header-image-wrap"> header image is displayed here </div>
        <div id="header-image-widget-area"> my widget should be displayed here</div>
    </div>
</div>
因此,我创建了小部件(如果我将其插入到页面上的任何可用挂钩上,效果会很好),然后修改了函数以添加显示小部件的部分。以下是参考代码:

/**************************/
/*  Register My Widget
/**************************/
add_action( \'widgets_init\', \'my_register_widget\' );
function my_register_widget() {
    register_sidebar(
        array(
            \'id\' => \'header_image_widget\',
            \'name\' => __( \'(my) Widget over Header Image\' ),
            \'description\' => __( \'My widget to be displayed over the header image.\' ),
            \'before_widget\' => \'<div id="%1$s" class="widget %2$s">\',
            \'after_widget\' => \'</div>\',
            \'before_title\' => \'<h3 class="widget-title">\',
            \'after_title\' => \'</h3>\'
        )
    );
    /* Repeat register_sidebar() code for additional widgets. */
}

/**********************************************/
/* Header image function replacement
/**********************************************/
// this makes wp run my function after the parent one, because my priority is 20 and the parent priority is defined to 10
add_filter( \'get_header_image_tag\', \'my_colormag_header_image_markup\', 20, 3 );

// Filter the get_header_image_tag() for option of adding the link back to home page option
function my_colormag_header_image_markup( $html, $header, $attr ) {
    $output = \'\';
    $header_image = get_header_image();

    if( ! empty( $header_image ) ) {           
        $output .= \'<div class="header-image-wrap"> <img src="..."> </div>\';

        /* adding my widget to the header image */
        if ( is_active_sidebar( \'header_image_widget\' ) ) { 
            //-- my widget area starts here --
            $output .= \'<div id="header-image-widget-area">\' . dynamic_sidebar( \'header_image_widget\' ) . \'</div>\';
            //-- my widget area ends here --
        }
    }

    return $output;
}
因此,正如您所看到的,我所做的(并且正在尝试做的)是将小部件添加到标题图像之后的一个部分中div. 因此,我将节的代码附加到$output 还添加了dynamic_sidebar( \'header_image_widget\' ) 这样小部件就可以在该div中呈现(…我想…)。

测试后,我意识到它不起作用(至少如我所料)。这个div 截面内部为1(对应于TRUE 他选择了哪个dynamic_sidebar 因为小部件执行正确),小部件并没有添加到我定义的部分中,而是实际添加了before 收割台部分和outside 定义标题图像和sectionI的部分。我得到了这样的东西:

<div id="header-text-nav-container" class="clearfix">
    //...
    <div id="widget-name-9"> this is the widget code defined by my widget </div>
    <div id="wp-custom-header" class="wp-custom-header">
        <div class="header-image-wrap"> header image is displayed here </div>
        <div id="header-image-widget-area"> 1 </div>
    </div>
</div>
所以,我的问题是,我想问任何人,如何知道问题是什么-如何将小部件添加到$output 字符串以使其显示在header-image-widget-area 节(而不是1/true)?

提前非常感谢您提供的任何帮助

米格尔

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

如果要将小部件区域添加为输出变量的一部分,则需要使用ob函数,因为它是回显的而不是返回的。

像这样:

$output .= \'<div id="header-image-widget-area">\';
    ob_start();
        dynamic_sidebar( \'header_image_widget\' );
    $output .= ob_get_clean();
$output .=\'</div>\';

相关推荐

widgets not working

我粘贴了我的siderbar小部件代码widgets.php 文件 function right_sidebar_widget() { register_sidebar( array( \'name\' => \'Right Siderbar\', \'id\' => \'right-siderbar\', \'description\' => \'Right Sidebar\',