我通过以下代码创建了一个自定义小部件:
// 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>\',
)
);
我的前端中的小部件输出如下所示:
THE PROBLEM
标题位于小部件框之外。我尝试了很多方法将标题放在方框顶部,如下图所示,但没有成功:(
我的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(); ?>
对如何解决我的问题有什么建议吗?