自定义窗口小部件文件放在哪里?

时间:2017-02-25 作者:jrcollins

我基于父主题的一个自定义小部件创建了一个新的小部件。在父主题中,小部件文件位于/inctemplate-parts 文件夹。我在我的子主题中创建了这些相同的文件夹,但无法让小部件显示在小部件页面上。但是,如果我将小部件代码添加到functions.php 文件

UPDATE:

现在我有另一个问题:Fatal error: Call to undefined function add_action()

这是我用来注册小部件的代码:

// Register the widget
function myplugin_register_widgets() {     
register_widget( \'Home_Categories\' ); 
} 
add_action( \'widgets_init\', \'myplugin_register_widgets\' );
以下是原始小部件的注册方式:

// Register the widget

add_action( \'widgets_init\', create_function( \'\', \'return register_widget("Codilight_Widget_Block1");\'));

2 个回复
最合适的回答,由SO网友:David Lee 整理而成

如果创建了自定义小部件,请通过示例创建文件class.my-widget.php 包含自定义小部件的类定义,如下所示:

class my_widget extends WP_Widget {

    public function __construct() {
        //logic here
    }

    public function widget($args, $instance) {
        //logic here
    }

    public function form($instance) {
        //logic here
    }

    public function update($new_instance, $old_instance) {
        //logic here
    }

}
//registering my widget so its available in the back-end
add_action(\'widgets_init\', function() {
    register_widget(\'my_widget\');
});
文件位于主题的文件夹中,如下所示:

enter image description here

您必须加载该文件,为此,您必须将其添加到functions.php:

//lets define a constant for the URL to your theme folder
define(\'YOUR_THEME_FOLDER_PATH\', trailingslashit(get_template_directory(__FILE__)));
//lets load the custom widget
require_once (YOUR_THEME_FOLDER_PATH . \'inc/class.my-widget.php\');
theinc/ 可以将零件更新到文件所在的文件夹。

SO网友:Mark Kaplun

无需“重写”任何源文件来创建您自己的小部件。假设前一个小部件的存在是正确编码的,那么它本身不应该是一个问题,只会给小部件管理UI增加一些混乱。

因此,只需添加您自己的小部件,如果有帮助的话,继承原始的小部件类,如果您真的不想保留原始的小部件,只需使用https://codex.wordpress.org/Function_Reference/unregister_widget API

相关推荐

Displaying Widgets

在主题开发期间,我了解如何在functions.php 文件然而,当谈到在主题中显示小部件时,是否有一种首选的方式来显示它们-primary,使用the_widget() 功能与dynamic_sidebar() 作用