使用WordPress函数unregister_widget()取消注册widget
unregister_widget()
是 WordPress 中用于注销(移除)小工具(widget)的函数。它通常被用来从系统中删除默认的小工具,或者在特定条件下控制哪些小工具应该对用户可用。这个函数对于那些希望定制后台管理体验或者限制某些功能的开发者来说非常有用。其主要应用场景包括:
- 移除默认小工具:隐藏 WordPress 自带的日历、搜索等默认小工具
- 优化后台界面:清理小工具列表,避免用户误用不兼容主题功能的小工具
- 替换自定义功能:先移除默认小工具,再注册同名但功能增强的自定义版本
unregister_widget()基本语法
描述
WordPress PHP unregister_widget()函数取消注册 widget
用法
unregister_widget( $widget );
- $widget (string| WP_Widget ) (必需)WP_Widget子类的名称或WP_Widget子类的实例
推荐:[最新版]YITH WooCommerce Social Login社交登录插件
unregister_widget()函数
unregister_widget()
是主题开发中控制小工具生态的关键工具,合理使用可提升后台用户体验。建议配合 register_widget()
实现功能替换,并通过版本控制记录变更(如网页用户误操作案例)。对于需要保留部分默认工具的场景,推荐使用插件(如 Widget Disable)降低开发风险。(源文件可参考这里)
function unregister_widget( $widget ) {
global $wp_widget_factory;
$wp_widget_factory->unregister( $widget );
}
推荐:[最新版]Hero Menu免费下载响应式WordPress Mega Menu超级菜单插件
如何使用unregister_widget()
在 WordPress 中取消注册默认小部件,此代码片段使用 unregister_widget 函数取消注册默认小部件类 WP_Widget_Recent_Posts。my_unregister_default_widget 函数与 widgets_init 操作挂钩,以取消注册默认小部件。下面是如何使用该unregister_widget
函数取消注册 WordPress 中默认小部件的示例
function my_unregister_default_widget() {
unregister_widget( 'WP_Widget_Recent_Posts' );
}
add_action( 'widgets_init', 'my_unregister_default_widget' );
删除小部件,此示例显示如何取消注册日历小部件。当您需要用自己的小部件替换标准小部件时,它可能会派上用场:
add_action( 'widgets_init', 'remove_calendar_widget' );
function remove_calendar_widget() {
unregister_widget('WP_Widget_Calendar');
}
禁用所有标准 WordPress 小部件,要禁用 WordPress 中的所有基本小部件,请使用以下代码:
// Disable standard WordPress widgets
add_action('widgets_init', 'unregister_basic_widgets' );
function unregister_basic_widgets() {
unregister_widget('WP_Widget_Pages'); // Page widget
unregister_widget('WP_Widget_Calendar'); // Calendar
unregister_widget('WP_Widget_Archives'); // Archives
unregister_widget('WP_Widget_Links'); // Links
unregister_widget('WP_Widget_Meta'); // Meta widget
unregister_widget('WP_Widget_Search'); // Search
unregister_widget('WP_Widget_Text'); // Text
unregister_widget('WP_Widget_Categories'); // Categories
unregister_widget('WP_Widget_Recent_Posts'); // Recent posts
unregister_widget('WP_Widget_Recent_Comments'); // Recent comments
unregister_widget('WP_Widget_RSS'); // RSS
unregister_widget('WP_Widget_Tag_Cloud'); // Tag cloud
unregister_widget('WP_Nav_Menu_Widget'); // Menu
unregister_widget('WP_Widget_Media_Audio'); // Audio
unregister_widget('WP_Widget_Media_Video'); // Video
unregister_widget('WP_Widget_Media_Gallery'); // Gallery
unregister_widget('WP_Widget_Media_Image'); // Image
}
禁用 WordPress 中的小部件支持,上面的例子展示了如何默认禁用所有小部件,并让您选择禁用哪些小部件,不禁用哪些小部件。但是,如果您需要一次性禁用所有小部件,最好在它们连接之前执行此操作,即根本不连接它们,也不要调用连接其他小部件的事件。为此,请将函数wp_widgets_init()从事件中分离出来init,如下所示:
除了小部件的连接之外,函数wp_widgets_init()还会调用事件widgets_init,通常会将用于启用插件小部件的钩子挂在该事件上。因此,当您禁用此钩子时,插件小部件和主题很可能将无法工作。也就是说,小部件支持将被完全禁用。
remove_action( 'init', 'wp_widgets_init', 1 );
基本小部件的根本禁用,此示例显示了如何禁用基本的 WordPress 小部件。但必须以禁用 PHP 插件小部件文件的方式进行,禁用后,基本小部件类将不存在:WP_Widget_Pages、WP_Widget_Search 等。禁用后,我们可以用基类的名称创建自己的小部件。如果我可以这样说的话,这就是从根本上禁用基本小部件。
remove_action( 'plugins_loaded', 'wp_maybe_load_widgets', 0 );
// turn on the event disabled in wp_maybe_load_widgets
add_action( '_admin_menu', 'wp_widgets_add_menu' );
// not to register widgets of classes that now do not exist at all...
remove_action( 'init', 'wp_widgets_init', 1 );
// turn on the event disabled in wp_widgets_init
add_action( 'init', 'my_wp_widgets_init', 1 );
function my_wp_widgets_init(){
if ( !is_blog_installed() ) return;
/**
* Fires after all default WordPress widgets have been registered.
*
* @since 2.2.0
*/
do_action( 'widgets_init' );
}
由于这是一个低级设置,因此此类代码应该位于常规插件或强制插件中,但不能位于更靠后的插件中。安装此代码后,所有基本小部件都将被禁用,但管理面板中的小部件菜单将保持工作…您还可以使用基本小部件的 PHP 类名称编写自己的小部件:WP_Widget_Pages、WP_Widget_Search 等。
推荐:[最新版]WP Speed of Light Pro插件WordPress速度优化插件