WP_小部件{}

扩展核心基类以注册小部件。

描述

必须为每个小部件扩展此类,并且必须覆盖WP_widget::widget()。

如果添加小部件选项,还应覆盖WP_widget::update()和WP_Wigget::form()。

方法

姓名描述
WP_Widget::__constructPHP5构造函数。
WP_Widget::_get_display_callback检索小部件显示回调。
WP_Widget::_get_form_callback检索窗体回调。
WP_Widget::_get_update_callback检索小部件更新回调。
WP_Widget::注册器注册这个小部件类的所有小部件实例。
WP_Widget::_register_one注册小部件类的实例。
WP_桥接器::设置(_S)设置小部件实例的内部订单号。
WP_Widget::显示回调生成实际的小部件内容(请勿覆盖)。
WP_Widget::表单输出设置更新表单。
WP_Widget::form_callback生成小部件控制表单(请勿覆盖)。
WP_Widget::获取字段id构造用于WP_Widget::form()字段的id属性。
WP_Widget::获取字段名构造用于form()字段的名称属性
WP_Widget::获取设置检索小部件类的所有实例的设置。
WP_Widget::is_preview确定当前请求是否位于自定义程序预览中。
WP_Widget::保存设置保存小部件类的所有实例的设置。
WP_Widget::更新更新小部件的特定实例。
WP_Widget::update_callback处理更改的设置(请勿覆盖)。
WP_Widget::小部件回显小部件内容。
WP_Widget::WP_WidletPHP4构造函数-已弃用

来源

类WP_Widget{/***此类型的所有小部件的根ID。**@自2.8.0起*@var混合|string*/公共$id_base;/***此小部件类型的名称。**@自2.8.0起*@var字符串*/公共$name;/***此小部件类型的选项名称。**@自2.8.0起*@var字符串*/公共$option_name;/***此小部件类型的Alt选项名称。**@自2.8.0起*@var字符串*/公共$alt_option_name;/***传递给wp_register_sidebar_widget()的选项数组。**@自2.8.0起*@var数组*/公共$widget_options;/***传递给wp_register_widget_control()的选项数组。**@自2.8.0起*@var数组*/公共$control_options;/***当前实例的唯一ID号。**@自2.8.0起*@var bool |整数*/public$number=false;/***当前实例的唯一ID字符串(ID_base-number)。**@自2.8.0起*@var bool |字符串*/public$id=false;/***小部件数据是否已更新。**在POST提交后更新数据时设置为true-确保数据更新*不会发生两次。**@自2.8.0起*@var布尔*/public$updated=false;////必须由子类覆盖的成员函数。///***回显小部件内容。**子类应覆盖此函数以生成其小部件代码。**@自2.8.0起**@param array$args显示参数,包括“before_title”、“after_title”、,*'before_widget'和'after_widget]。*@param array$instance小部件特定实例的设置。*/公共功能小部件($args,$instance){die('函数WP_Widget::Widget()必须在子类中重写。');}/***更新小部件的特定实例。**此函数应检查“$new_instance”是否设置正确。新计算的*应返回`$instance`的值。如果返回false,则实例将不会*已保存/更新。**@自2.8.0起**@param array$new_instance用户通过输入此实例的新设置*WP_Widget::form()。*@param array$old_instance此实例的旧设置。*@return array Settings保存,bool false取消保存。*/公共函数更新($new_instance,$old_instance){返回$new_instance;}/***输出设置更新表单。**@自2.8.0起**@param array$instance当前设置。*@return string默认返回为“noform”。*/公共函数窗体($instance){echo'<p class=“no-options-widget”>'__('此小部件没有选项。')'</p> ';return'noform';}//您需要调用的函数。/***PHP5构造函数。**@自2.8.0起**小部件的@param string$id_base base id,小写且唯一。如果留空,*将使用小部件的PHP类名的一部分。必须是独一无二的。*配置页面上显示的小部件的@param string$name名称。*@param array$widget_options可选。小工具选项。请参阅wp_register_sidebar_widget()了解*关于已接受参数的信息。默认空数组。*@param array$control_options可选。小工具控制选项。请参阅wp_register_widget_control()了解*关于已接受参数的信息。默认的空数组。*/公共函数__construct($id_base,$name,$widget_options=数组(),$control_options=array()){if(!空($id_base)){$id_base=strtolower($id_base);}其他{$id_base=preg_replace('/(wp_)?widget_/','',strtollower(get_class($this));}$this->id_base=$id_base;$this->name=$name;$this->option_name=“小部件_”$此->id库;$this->widget_options=wp_parse_args($widget_options,阵列(“classname”=>str_replace(“\\”,“_”,$this->option_name),“customize_selective_refresh”=>false,));$this->control_options=wp_parse_args($control_options,数组('id_base'=>$this->id_base));}/***PHP4构造函数。**@自2.8.0起*@deprecated 4.3.0改用__construct()。**@请参阅WP_Widget::__construct()**小部件的@param string$id_base base id,小写且唯一。如果留空,*将使用小部件的PHP类名的一部分。必须是独一无二的。*配置页面上显示的小部件的@param string$name名称。*@param array$widget_options可选。小工具选项。请参阅wp_register_sidebar_widget()了解*关于已接受参数的信息。默认空数组。*@param array$control_options可选。小工具控制选项。请参阅wp_register_widget_control()了解*关于已接受参数的信息。默认空数组。*/公共函数WP_Widget($id_base,$name,$Widget_options=数组(),$control_options=array()){_deprecated_constructor(“WP_Widget”,“4.3.0”,get_class($this));WP_Widget::__construct($id_base,$name,$Widget_options,$control_options);}/***构造用于form()字段的名称属性**应该在form()方法中使用此函数为字段创建名称属性*由update()保存**@自2.8.0起*@自4.4.0起,现在接受数组格式的字段名称。**@param string$field_name字段名。*`$field_Name`的@return string Name属性。*/公共函数get_field_name($field_nname){$pos=strpos($field_name,'[');if(false!==$pos){//将第一次出现的“[”替换为“][”。$field_name=“[”.substr_replace($field-name,“][”,$pos,strlen(“[”));}其他{$field_name=“[”.$field-name.']”;}返回“widget-”$此->id基础。'[“.$此->数字。”]“$字段名称;}/***构造用于WP_Widget::form()字段的id属性。**此函数应在form()方法中用于创建id属性*用于由WP_Widget::update()保存的字段。**@自2.8.0起*@since 4.4.0现在接受数组格式字段ID。**@param string$field_name字段名。*`$field_name`的@return字符串ID属性。*/公共函数get_field_id($field_name){$field_name=str_replace(数组(“[]”,“[”,“]”),数组(“”,“-”,“”),$field-name);$field_name=修剪($field-name,'-');返回“widget-”$此->id基础。'-'$这个->数字。“-”$字段名称;}/***注册这个小部件类的所有小部件实例。**@自2.8.0起*/公共函数_register(){$settings=$this->get_settings();$empty=true;//当$settings是类似数组的对象时,获取一个内部数组以与array_keys()一起使用。if(ArrayObject的$settings实例||$settings-instanceof ArrayIterator){$settings=$settings->getArrayCopy();}if(is_array($settings)){foreach(array_keys($settings)作为$number){if(is_numeric($number)){$this->_set($number);$this->_register_one($number);$empty=false;}}}if($空){//如果没有,我们使用通用模板注册小部件的存在。$this->_set(1);$this->_register_one();}}/***设置小部件实例的内部订单号。**@自2.8.0起**@param int$number此小部件实例与其他小部件实例相比的唯一订单号*同一类的实例。*/公共函数set($number){$this->数字=$number;$this->id=$this->id_base.'-'$数量;}/***检索小部件显示回调。**@自2.8.0起**@return callable显示回调。*/公共函数_get_display_callback(){返回数组($this,'display_callback');}/***检索小部件更新回调。**@自2.8.0起**@return可调用更新回调。*/公共函数_get_update_callback(){返回数组($this,'update_callback');}/***检索窗体回调。**@自2.8.0起**@return可调用窗体回调。*/公共函数_get_form_callback(){返回数组($this,'form_callback');}/***确定当前请求是否位于自定义程序预览中。**如果为true——当前请求在Customizer预览中,那么*对象缓存被挂起,小部件应该对此进行检查以确定*是否应将任何内容持久存储到对象缓存,*到瞬态或其他任何地方。**@自3.9.0起**@global WP_Customize_Manager$WP_Customize**@return bool如果在“自定义程序”预览中,则为True,否则为false。*/公共函数is_preview(){全局$wp_customize;返回(isset($wp_customize)&&$wp_customize->is_preview());}/***生成实际的小部件内容(请勿覆盖)。**查找实例并调用WP_Widget::Widget()。**@自2.8.0起**@param array$args显示参数。有关信息,请参阅WP_Widget::Widget()*在公认的论据上。*@param int |数组$widget_args{*可选。小部件实例的内部订单号或多小部件参数数组。*默认值1。**@type int$number用于同一小部件的倍数的数字增量。* }*/公共函数display_callback($args,$widget_args=1){if(is_numeric($widget_args)){$widget_args=数组(“数字”=>$widget_args);}$widget_args=wp_parse_args($widget_args,数组(“数字”=>-1));$this->_set($widget_args['number']);$instances=$this->get_settings();if(isset($instances[$this->number]){$instance=$instances[$this->number];/***过滤特定小部件实例的设置。**返回false将有效地缩短小部件的显示。**@自2.8.0起**@param array$instance当前小部件实例的设置。*@param WP_Widget$小部件当前小部件实例。*@param array$args默认小部件参数的数组。*/$instance=应用过滤器('widget_display_callback',$instance,$this,$args);if(false===$instance){回报;}$was_cache_addition_suspended=wp_suspend _ cache_addition();if($this->is_preview()&&$was_cache_addition_suspended){wp_suspend_cache_adition(true);}$this->小部件($args,$instance);if($this->is_preview()){wp_suspend_cache_adition($was_cache_adition_suspended);}}}/***处理更改的设置(请勿超越)。**@自2.8.0起**@全局数组$wp_registered_widgets**@param int$已弃用未使用。*/公共函数update_callback($deprecated=1){全局$wp_registered_widgets;$all_instances=$this->get_settings();//我们需要更新数据。if($this->更新){回报;}if(isset($_POST['delete_widget'])&&$_POST['delele_widget']){//删除该小部件实例的设置。if(isset($_POST['the-widget-id'])){$del_id=$_POST[“小部件id”];}其他{回报;}if(isset($wp_registered_widgets[$del_id][“参数”][0][“编号”]){$number=$wp_registered_widgets[$del_id][“参数”][0][“编号”];if($this->id_base.'-'.$number===$del_id){取消设置($all_instances[$number]);}}}其他{if(isset($_POST['widget-'.$this->id_base])&&is_array($_POST['wide-'.$his->id_ base]){$settings=$_POST[“小部件-”.$this->id_base];}elseif(isset($_POST['id_base'])&&$_POST['id_case']===$this->id_base){$num=$_POST['multi_number']?(int)$_POST['multi_number']:(int)$_POST['widget_number'];$settings=数组($num=>array());}其他{回报;}foreach($settings为$number=>$newinstance){$new_instance=条带斜杠_deep($new_nstance);$this->_set($number);$old_instance=isset($all_instances[$number])$所有实例[$number]:数组();$was_cache_addition_suspended=wp_suspend _ cache_addition();if($this->is_preview()&&$was_cache_addition_suspended){wp_suspend_cache_addition(真);}$instance=$this->更新($new_instance,$old_instance);if($this->is_preview()){wp_suspend_cache_adition($was_cache_adition_suspended);}/***保存前过滤小部件的设置。**返回false将有效地缩短小部件的功能*以更新设置。**@自2.8.0起**@param array$instance当前小部件实例的设置。*@param array$new_instance新小部件设置的数组。*@param array$old_instance旧窗口小部件设置的数组。*@param WP_Widget$小部件当前小部件实例。*/$instance=apply_filters('widget_update_callback',$instance,$new_instance,$旧实例,$this);if(false!==$instance){$all_instances[$number]=$instance;}中断;//只运行一次。}}$this->save_settings($all_instances);$this->updated=true;}/***生成小部件控制表单(请勿覆盖)。**@自2.8.0起**@param int |数组$widget_args{*可选。小部件实例的内部订单号或多小部件参数数组。*默认值1。**@type int$number用于同一小部件的倍数的数字增量。* }*@return string |空*/公共函数form_callback($widget_args=1){if(is_numeric($widget_args)){$widget_args=数组(“数字”=>$widget_args);}$widget_args=wp_parse_args($widget_args,数组(“数字”=>-1));$all_instances=$this->get_settings();if(-1===$widget_args['number']){//我们回显出一个表单,稍后可以设置“数字”。$this->_set('____');$instance=数组();}其他{$this->_set($widget_args['number']);$instance=$all_instances[$widget_args['number']];}/***在显示控件窗体之前过滤小部件实例的设置。**返回控制窗体的错误有效短路显示。**@自2.8.0起**@param array$instance当前小部件实例的设置。*@param WP_Widget$小部件当前小部件实例。*/$instance=apply_filters('widget_form_callback',$instance,$this);$return=空;if(false!==$instance){$return=$this->表单($instance);/***在小部件控件窗体的末尾激发。**使用这个钩子向小部件表单添加额外的字段*仅当传递给“widget_form_callback”的值时才会激发*钩子不是假的。**注意:如果小部件没有表单,文本将从默认值回显*可以使用CSS隐藏表单方法。**@自2.8.0起**@param WP_Widget$Widget小部件实例(通过引用传递)。*@param null$return如果添加了新字段,则返回null。*@param array$instance小部件设置的数组。*/do_action_ref_array(“in_widget_form”,数组(&$this,&$return,$instance));}return$return;}/***注册小部件类的实例。**@自2.8.0起**@param int$number可选。此小部件实例的唯一订单号*与同一类的其他实例进行比较。默认值为1。*/公共函数_register_one($number=-1){wp_register_sidebar小部件($this->id,$this->名称,$this->_get_display_callback(),$this->widget_options,数组(“number”=>$number));_注册表小部件更新回调($this->id_base,$this->_get_update_callback(),$this->control_options,数组(“数字”=>-1));_注册表小部件格式回调($this->id,$this->名称,$this->_get_form_callback(),$this->control_options,数组('number'=>$number));}/***保存小部件类的所有实例的设置。**@自2.8.0起**@param array$settings小部件实例设置的多维数组。*/公共函数save_settings($settings){$settings['_multiwidget']=1;update_option($this->option_name,$settings);}/***检索小部件类的所有实例的设置。**@自2.8.0起**@return array小部件实例设置的多维数组。*/公共函数get_settings(){$settings=获取选项($this->option_name);if(false===$设置){$settings=数组();if(isset($this->alt_option_name)){//从替代(传统)选项获取设置。$settings=获取选项($this->alt_option_name,array());//删除替代(传统)选项,因为将使用`$this->option_name`创建新选项。删除选项($this->alt_option_name);}//保存一个选项,以便下次自动加载。$this->save_settings($settings);}if(!is_array($settings)&&!(ArrayObject的$settings实例||$settings-instanceof ArrayIterator){$settings=数组();}if(!空($settings)&&!isset($设置['_multiwidget']){//旧格式,如果是单个小部件,则进行转换。$设置=wp_convert_widget_settings($this->id_base,$this->option_name,$settings);}取消设置($settings['_multiwidget'],$settings['___']);返回$settings;}}

变更日志

版本描述
4.4.0从wp-includes/widgets.php移到它自己的文件
2.8.0介绍。

用户贡献的笔记

  1. 跳到注释2内容

    当一个插件被停用然后被删除时,wp_options表可能会继续保存关于这个卸载的小部件的数据。下面是一个purge()类方法,可以在插件卸载期间调用该方法来清理数据库。

    const PLUGIN_SLUG='My_PLUGIN';//此插件的简短显示名称,未本地化。类My_Widget扩展了\WP_Widget{private const BASE_ID='my_widget';//WordPress中唯一的小写基本ID。/**销毁子类选项(用于插件卸载)。*/公共静态函数purge(){//清除此小部件的所有设置。if(!\delete_option('widget_'.self::BASE_ID))error_log(__FILE__.':“delete_option()”对'.self::BASE_ID失败);//清除侧栏中出现的任何小部件。$occurrences=get_option('sidepars_widgets');if(is_array($occurrences)){foreach($occurrences作为$sidebar=>$instances){if(isarray($instances))foreach($instance as$key=>$widget){如果(1==preg_match('/^'.self::BASE_ID.'(?:-\\d+)?$/'$小部件)//此实例与小部件的命名模式匹配。未设置($occurrences[$sidear][$key]);}}//重写边栏,不出现此小部件。update_option(“侧边栏小部件”,$occurrences);}}//。。。小部件代码的其余部分}/***“卸载”操作处理程序。* *@参见https://codex.wordpress.org/Function_Reference/register_uninstall_hook*/函数on_uninstall():void{if(!\current_user_can('activate_plugins')){\wp_die(__('您没有足够的权限访问此页面。',PLUGIN_SLUG),PLUGEN_SLUG);}if(!\delete_option(PLUGIN_SLUG))error_log(__FILE__.':“delete_option()”失败');My_Widget::purge();}/***“激活”操作处理程序。**@参见https://codex.wordpress.org/Function_Reference/register_activation_hook*/函数on_activate():void{//注册卸载挂钩以进行清理。\register_uninstall_hook(__FILE__,__NAMESPACE__.'\on_uninstall’);}/**API注册*/if(\is_blog_admin()){//后端注册\register_activation_hook(__FILE__,__NAMESPACE__.'\on_activate');\注册表激活挂钩(__FILE__,__NAMESPACE__.'\on_deactivate');// ... 添加其他动作/过滤器挂钩}

你必须登录在能够发表注释或反馈之前。