如何在自定义前端模板框中回显Widget标题

时间:2014-08-29 作者:NewUser

我通过以下代码创建了一个自定义小部件:

    // Creating the widget 
class wpb_widget extends WP_Widget {

function __construct() {
    parent::__construct(
    // Base ID of your widget
    \'wpb_widget\', 

    // Widget name will appear in UI
    __(\'WPBeginner Widget\', \'wpb_widget_domain\'), 

    // Widget description
    array( \'description\' => __( \'Sample widget based on WPBeginner Tutorial\', \'wpb_widget_domain\' ), ) 
    );
}

// Creating widget front-end
// This is where the action happens
public function widget( $args, $instance ) {
    $title = apply_filters( \'widget_title\', $instance[\'title\'] );
    // before and after widget arguments are defined by themes
    echo $args[\'before_widget\'];
    if ( ! empty( $title ) )
    echo $args[\'before_title\'] . $title . $args[\'after_title\'];

    // This is where you run the code and display the output
    echo get_template_part( \'partials/widgets/test-w\' );
    echo $args[\'after_widget\'];
}

// Widget Backend 
public function form( $instance ) {
    if ( isset( $instance[ \'title\' ] ) ) {
        $title = $instance[ \'title\' ];
    }
    else {
        $title = __( \'New title\', \'wpb_widget_domain\' );
    }
    // Widget admin form
    ?>
    <p>
    <label for="<?php echo $this->get_field_id( \'title\' ); ?>"><?php _e( \'Title:\' ); ?></label> 
    <input class="widefat" id="<?php echo $this->get_field_id( \'title\' ); ?>" name="<?php echo $this->get_field_name( \'title\' ); ?>" type="text" value="<?php echo esc_attr( $title ); ?>" />
    </p>
    <?php 
}

// Updating widget replacing old instances with new
public function update( $new_instance, $old_instance ) {
    $instance = array();
    $instance[\'title\'] = ( ! empty( $new_instance[\'title\'] ) ) ? strip_tags( $new_instance[\'title\'] ) : \'\';
    return $instance;
}
} // Class wpb_widget ends here

// Register and load the widget
function wpb_load_widget() {
    register_widget( \'wpb_widget\' );
}
add_action( \'widgets_init\', \'wpb_load_widget\' );

As you can see, i echo a html template with

echo get_template_part( \'partials/widgets/test-w\' );
在主代码中。

我已经在函数中注册了侧栏。带有以下代码的php

    register_sidebar(
    array(
        \'name\'              => \'Index Right\',
        \'before_widget\' => \'<div id="%1$s" class="widget %2$s">\',
        \'after_widget\'  => \'</div>\',
        \'before_title\'  => \'<h3 class="widget-title">\',
        \'after_title\'   => \'</h3>\',
    )
);
我的前端中的小部件输出如下所示:

enter image description here

THE PROBLEM

标题位于小部件框之外。我尝试了很多方法将标题放在方框顶部,如下图所示,但没有成功:(

enter image description here

我的php/html代码(echo get_template_part... )对于小部件,如下所示

    <?php
   $default_thumbnail = \'http://vvvvvvvv.com/vvvvvvvvv.png\';
   $the_query = new WP_Query(\'showposts=12&orderby=desc&category_name=featured\');
  while ($the_query->have_posts()) : $the_query->the_post();
?>
<div class="notbad-1">              
    <a target="_blank" href="<?php the_permalink()?>">
        <ul class="top-page-test">                          
            <li class="top-page-test-list">
                        <?php
                        if (has_post_thumbnail()):
                        the_post_thumbnail(\'thumbnail-test\');
                        else:
                        ?>
                        <img src="<?php echo $thumbnail; ?>"/>
                        <?php endif; ?>
            </li>
            <li class="test-image-title">               
            <?php the_title(); ?>       
            </li>
        </ul>
    </a> 
</div>      
<?php endwhile; ?>
<?php wp_reset_query(); ?>
对如何解决我的问题有什么建议吗?

1 个回复
SO网友:realloc

在这种情况下,不应使用echo。请访问function reference of get_template_part. 正如您将看到的,没有可打印的内容:

get\\u template\\u part不返回值,如果找不到匹配的模板文件,也不会发出警告。

此外,我建议您查看以下问题:Should we use get_template_part() in functions files instead of include_once?

结束