按名称显示WordPress小工具

时间:2018-10-20 作者:fxcjahid

我注册了一个小部件

register_widget(\'Education_Work\');
现在我可以按注册名称调用小部件了吗?有可能吗?

dynamic_sidebar(\'home-1\');  // don\'t need this
我想要dynamic_sidebar(\'Education_Work\');

2 个回复
SO网友:Tom J Nowell

您将使用the_widget

https://codex.wordpress.org/Function_Reference/the_widget

此模板标记显示侧栏外部的任意小部件。它可以在模板中的任何位置使用。

 <?php the_widget( $widget, $instance, $args ); ?>
例如:。<?php the_widget( \'WP_Widget_Archives\' ); ?>

SO网友:Remzi Cavdar

在Wordpress中,小部件显示在侧栏中。您应该首先注册侧栏,页脚和/或页眉小部件区域也会注册到侧栏。

我不知道你是在开发插件还是主题。如果你正在开发一个主题,你应该在functions.php 对于插件,在哪里注册小部件并不重要。

参见文档:https://codex.wordpress.org/Function_Reference/register_sidebar
首先,让我们注册一个侧栏:

function themename_widgets_init() {
register_sidebar( array(
    \'name\'          => __( \'Primary Sidebar\', \'theme_name\' ),
    \'id\'            => \'primary-sidebar\',
    \'before_widget\' => \'<aside id="%1$s" class="widget %2$s">\',
    \'after_widget\'  => \'</aside>\',
    \'before_title\'  => \'<h1 class="widget-title">\',
    \'after_title\'   => \'</h1>\',
) );

register_sidebar( array(
    \'name\'          => __( \'Footer\', \'theme_name\' ),
    \'id\'            => \'footer\',
    \'before_widget\' => \'<aside id="%1$s" class="widget %2$s">\',
    \'after_widget\'  => \'</aside>\',
    \'before_title\'  => \'<h1 class="widget-title">\',
    \'after_title\'   => \'</h1>\',
) );

}
add_action( \'widgets_init\', \'themename_widgets_init\' );
参见文档:https://developer.wordpress.org/themes/functionality/sidebars/
要显示这些侧栏,您需要放置<?php get_sidebar(); ?> 在某处创建sidebar.php 模板文件并使用dynamic\\u边栏函数显示边栏,如下所示:
<?php dynamic_sidebar( \'primary-sidebar\' ); ?>

请参阅文档:https://codex.wordpress.org/Widgets_API
然后我们创建小部件:

/**
 * Adds Foo_Widget widget.
 */
class Foo_Widget extends WP_Widget {

/**
 * Register widget with WordPress.
 */
function __construct() {
    parent::__construct(
        \'foo_widget\', // Base ID
        esc_html__( \'Widget Title\', \'text_domain\' ), // Name
        array( \'description\' => esc_html__( \'A Foo Widget\', \'text_domain\' ), ) // Args
    );
}

/**
 * Front-end display of widget.
 *
 * @see WP_Widget::widget()
 *
 * @param array $args     Widget arguments.
 * @param array $instance Saved values from database.
 */
public function widget( $args, $instance ) {
    echo $args[\'before_widget\'];
    if ( ! empty( $instance[\'title\'] ) ) {
        echo $args[\'before_title\'] . apply_filters( \'widget_title\', $instance[\'title\'] ) . $args[\'after_title\'];
    }
    echo esc_html__( \'Hello, World!\', \'text_domain\' );
    echo $args[\'after_widget\'];
}

/**
 * Back-end widget form.
 *
 * @see WP_Widget::form()
 *
 * @param array $instance Previously saved values from database.
 */
public function form( $instance ) {
    $title = ! empty( $instance[\'title\'] ) ? $instance[\'title\'] : esc_html__( \'New title\', \'text_domain\' );
    ?>
    <p>
    <label for="<?php echo esc_attr( $this->get_field_id( \'title\' ) ); ?>"><?php esc_attr_e( \'Title:\', \'text_domain\' ); ?></label> 
    <input class="widefat" id="<?php echo esc_attr( $this->get_field_id( \'title\' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( \'title\' ) ); ?>" type="text" value="<?php echo esc_attr( $title ); ?>">
    </p>
    <?php 
}

/**
 * Sanitize widget form values as they are saved.
 *
 * @see WP_Widget::update()
 *
 * @param array $new_instance Values just sent to be saved.
 * @param array $old_instance Previously saved values from database.
 *
 * @return array Updated safe values to be saved.
 */
public function update( $new_instance, $old_instance ) {
    $instance = array();
    $instance[\'title\'] = ( ! empty( $new_instance[\'title\'] ) ) ? sanitize_text_field( $new_instance[\'title\'] ) : \'\';

    return $instance;
}

} // class Foo_Widget
最后,您需要注册此小部件:

// register Foo_Widget widget
function register_foo_widget() {
   register_widget( \'Foo_Widget\' );
}
add_action( \'widgets_init\', \'register_foo_widget\' );

结束

相关推荐

Using add_filter() in Widgets

只需查询引用add_filter() 作用您可以在WordPress小部件类中使用此函数吗。Example我有一个带有动态创建代码的小部件,我想将其传递给插件中创建的另一个函数。这能实现吗?<?php /** * Display the actual Widget * * @param Array $args * @param Array $instance */ public function widget($args, $inst