如何创建根据页面动态变化的WordPress小部件

时间:2018-11-27 作者:mallik1055

我正在创建一个插件,在这个插件中,我的自定义边栏小部件根据加载的页面更改内容。一种方法是

// Register and load the widget
function custom_register_widget() {
    register_widget( \'custom_widget\' );
}

//trigger on every sidebar load
add_action(\'dynamic_sidebar\', \'custom_register_widget\' );
但是,这称为register_widget() 在每次页面加载时(从而更改WordPress DB),从而降低页面速度。

有没有有效的方法?

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

register_widget() 不会对数据库进行任何更改。它所做的一切就是让一个特定的小部件可以使用。它不应该用在dynamic_sidebar 钩应该用在widgets_init

如果希望小部件的内容根据当前页面的不同而变化,那么该逻辑需要在小部件本身中,在widget() 方法:

class My_Widget extends WP_Widget {
    public function __construct() {}

    public function widget( $args, $instance ) {
        if ( is_page() ) {
            $page_id = get_queried_object_id();

            echo get_the_title( $page_id );
        }
    }

    public function form( $instance ) {}

    public function update( $new_instance, $old_instance ) {}
}
如果您正在查看页面,该示例将输出当前页面标题。

结束

相关推荐

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