WP_小工具_媒体{}

实现媒体小部件的核心类。

描述

另请参见

方法

姓名描述
WP_Widget_Media::__construct建造师。
WP_Widget_Media::注册在注册该小部件类的所有小部件实例时添加钩子。
WP_Widget_Media::显示媒体状态过滤“介质”列表中项目的默认介质显示状态。
WP_Widget_Media::队列管理员脚本加载小部件控件所需的脚本和样式。
WP_Widget_Media::enqueue_preview_scripts将预览脚本排队。
WP_Widget_Media::表单输出设置更新表单。
WP_Widget_Media::获取默认描述返回小部件的默认描述。
WP_Widget_Media::获取实例模式获取小部件实例(项)属性的模式。
WP_Widget_Media::获取_ l10n_defaults返回小部件使用的默认本地化字符串。
WP_Widget_Media::有内容小部件是否有要显示的内容。
WP_Widget_Media::是带有时间类型的附件确定提供的附件是否用于具有指定MIME类型的有效附件帖子。
WP_Widget_Media::render_control_template_scripts呈现表单模板脚本。
WP_Widget_Media::render_Media在前端渲染媒体。
WP_Widget_Media::重置默认标签重置默认标签的缓存。
WP_Widget_Media::清理标记列表整理标记列表字符串,例如在HTML rel和类属性中使用的字符串。
WP_Widget_Media::更新在保存小部件表单值时对其进行清理。
WP_Widget_Media::小部件在前端显示小部件。

来源

抽象类WP_Widget_Media扩展了WP_Widlet{/***翻译标签。**@自4.8.0起*@var数组*/public$l10n=数组(“add_to_widget”=>“”,“replace_media”=>“”,“编辑媒体”=>“”,'media_library_state_multi'=>'',“media_library_state_single”=>“”,'missing_attachment'=>'','未选择媒体'=>'','添加媒体'=>'',);/***小部件是否已注册。**@自4.8.1起*@var布尔*/protected$registered=false;/***默认的小部件描述。**@自6.0.0起*@var字符串*/受保护的静态$default_description=“”;/***小部件使用的默认本地化字符串。**@自6.0.0起*@var字符串[]*/受保护的静态$l10n_defaults=array();/***建造师。**@自4.8.0起**小部件的@param string$id_base base id,小写且唯一。*配置页面上显示的小部件的@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()){$widget_opts=wp_parse_args($widget_options,阵列('description'=>self::get_default_description(),“customize_selective_refresh”=>true,“show_instance_in_rest”=>true,“mime_type”=>“”,));$control_opts=wp_parse_args($control_选项,数组());$this->l10n=数组合并(self::get_l10n_defaults(),数组过滤器($this->l10n));父级::__construct($id_base,$名称,$widget_opts,$控制点);}/***在注册该小部件类的所有小部件实例时添加挂钩。**@自4.8.0起**@param int$number可选。此小部件实例的唯一订单号*与同一类的其他实例进行比较。默认值为1。*/公共函数_register_one($number=-1){父项::_register_one($number);如果($this->已注册){回报;}$this->registered=true;/**注意,定制器中的小部件组件也可以*WP_Customize_widgets::print_scripts()中的“admin_print_scripts-widgets.php”操作。*/add_action(“admin_print_scripts-widgets.php”,数组($this,“enqueue_admin_scripts”);if($this->is_preview()){add_action('wp_enqueue_scripts',数组($this,'enqueue_preview_scripts]);}/**注意,定制器中的小部件组件也可以*WP_Customize_widgets::print_footer_scripts()中的“admin_footer-widgets.php”操作。*/add_action('admin_footer-widgets.php',数组($this,'render_control_template_scripts');add_filter('显示_媒体_状态',数组($this,'显示_多媒体_状态'),10,2);}/***获取小部件实例(项)属性的模式。**@自4.8.0起**@请参阅WP_REST_Controller::get_item_schema()*@请参阅WP_REST_Controller::get_aditional_fields()*@链接https://core.trac.wordpress.org/ticket/35574**属性的@return数组架构。*/公共函数get_instance_schema(){$schema=数组(“attachment_id”=>数组(“type”=>“integer”,“默认”=>0,“最小值”=>0,“description”=>__(“附件帖子ID”),“media_prop”=>“id”,),“url”=>数组(“type”=>“string”,“默认”=>“”,“format”=>“uri”,“description”=>__(“媒体文件的URL”),),“title”=>数组(“type”=>“string”,“默认”=>“”,“sanitize_callback”=>“sanitizer_text_field”,“description”=>__(“小部件标题”),“should_preview_update”=>false,),);/***过滤媒体小部件实例架构以添加其他属性。**@自4.9.0起**@param array$schema实例架构。*@param WP_Widget_Media$Widget Widget对象。*/$schema=应用过滤器(“widget_{$this->id_base}_instance_schema”,$schema,$this);返回$schema;}/***确定提供的附件是否用于具有指定MIME类型的有效附件帖子。**@自4.8.0起**@param int | WP_Post$附件帖子ID或对象。*@param string$mime_type mime类型。*@return bool正在匹配MIME类型。*/公共函数是_attachment_with_mime_type($attachment,$mime_type){if(空($attachment)){返回false;}$attachment=get_post($attachment);if(!$附件){返回false;}if('attachment'!==$attachment->post_type){返回false;}返回wp_attachment_is($mime_type,$attachment);}/***整理标记列表字符串,例如在HTML rel和类属性中使用的字符串。**@自4.8.0起**@链接http://w3c.github.io/html/instructure.html#空间-分离的tokens*@链接https://developer.mozilla.org/en-US/docs/Web/API/DOMTokenList网站*@param string | array$tokens由空格或标记数组分隔的标记列表。*@return string清理令牌字符串列表。*/公共函数sanitize_token_list($tokens){if(is_string($tokens)){$tokens=preg_split('/\s+/',trim($tokes));}$tokens=array_map('sanitize_html_class',$tokes);$tokens=数组过滤器($tokes);返回内爆(“”,$tokens);}/***在前端显示小部件。**@自4.8.0起**@请参阅WP_Widget::Widget()**@param array$args显示参数,包括before_title、after_title、before_widget和after_widget。*@param array$instance已从数据库中保存设置。*/公共功能小部件($args,$instance){$instance=wp_parse_args($instance,wp_list_pluck($this->get_instance_schema(),'default'));//如果未选择媒体,则短路。if(!$this->has_content($instance)){回报;}echo$args[“小部件之前”];/**该过滤器记录在wp-includes/widgets/class-wp-widget-pages.php中*/$title=应用过滤器('widget_title',$instance['title'],$instance,$this->id_base);如果($title){echo$args[“标题之前”]$标题$args['after_title'];}/***在渲染媒体之前过滤媒体小部件实例。**@自4.8.0起**@param array$instance实例数据。*@param array$args小部件参数。*@param WP_Widget_Media$Widget Widget对象。*/$instance=应用过滤器(“widget_{$this->id_base}_instance”,$instance,$args,$this);$this->render_media($instance);echo$args['after_widget'];}/***在保存小部件表单值时对其进行清理。**@自4.8.0起*@since 5.9.0将`$instance`重命名为`$old_instance`以匹配父类*用于PHP 8命名参数支持。**@请参阅WP_Widget::update()*@请参阅WP_REST_Request::has_valid_params()*@请参阅WP_REST_Request::sanitive_params()**@param array$new_instance刚刚发送要保存的值。*@param array$old_instance以前从数据库中保存的值。*@return array已更新要保存的安全值。*/公共函数更新($new_instance,$old_instance){$schema=$this->get_instance_schema();foreach($schema作为$field=>$field_schema){如果(!array_key_exists($field,$new_instance)){继续;}$value=$new_instance[$field];/**rest_validate_value_from_schema()的解决方法,因为*rest_is_boolean(“”)===false,而rest_is_coolean('1')为true。*/if(“boolean”===$field_schema[“type”]&&“”==$value){$value=false;}if(true!==rest_validate_value_from_schema($value,$field_schema,$field)){继续;}$value=rest_sanitize_value_from_schema($value,$field_schema);//@codeCoverage忽略开始if(iswp_error($value)){继续;//当rest_sanitize_value_from_schema()返回其phpdoc@return标记指示的WP_Error时,处理大小写。}//@codeCoverage忽略结束if(isset($field_schema['sanitize_callback'])){$value=call_user_func($field_schema['sanitize_callback'],$value);}if(iswp_error($value)){继续;}$old_instance[$field]=$value;}返回$old_instance;}/***在前端渲染媒体。**@自4.8.0起**@param array$instance Widget实例道具。*/抽象公共函数render_media($instance);/***输出设置更新表单。**请注意,小部件UI本身是通过“MediaWidgetControl#render()”用JavaScript呈现的。**@自4.8.0起**@请参阅\WP_Widget_Media::render_control_template_scripts()JS模板所在的位置。**@param array$instance当前设置。*/最终公共函数表单($instance){$instance_schema=$this->get_instance_schema();$instance=wp_array_slice_assoc(wp_parse_args((数组)$instance,wp_list_pluck($instance_schema,'默认')),array_keys($instance_schema));foreach($instance作为$name=>$value):?><输入type=“隐藏”data-property=“<?php-echo esc_attr($name);?>”class=“media-widget-instance-property”name=“<?php echo esc_attr($this->get_field_name($name));?>”id=“<?php echo esc_attr($this->get_field_id($name));//wpWidgets.appendTitle()特别需要。?>”value=“<?php-echo esc_attr(is_array($value)?内爆(',',$value/><?php(电话)每端;}/***过滤“介质”列表中项目的默认介质显示状态。**@自4.8.0起**@param array$states媒体状态的数组。*@param WP_Post$Post当前附件对象。*@return数组*/公共函数display_media_state($states,$post=null){if(!$post){$post=获取post();}//统计此附件在小部件中使用的次数。$use_count=0;foreach($this->get_settings()作为$instance){if(isset($instance['attachment_id'])&&$instance['attachement_id']===$post->id){++$use_count;}}如果(1===$use_count){$状态[]=$this->l10n['media_library_state_single'];}elseif($use_count>0){$states[]=sprintf(translate_nooped_plural($this->l10n['media_library_state_multi'],$use_count),number_format_i18n($use\ocount));}返回$states;}/***将预览脚本排队。**这些脚本通常在呈现小部件时实时排队。*然而,在定制程序中,可以通过以下方式动态添加和呈现小部件*选择性刷新,因此无条件地将它们排队很重要*如果确实添加了小部件。**@自4.8.0起*/公共函数enqueue_preview_scripts(){}/***加载小部件控件所需的脚本和样式。**@自4.8.0起*/公共函数enqueue_admin_scripts(){wp_enque_media();wp_enqueue_script(“媒体小部件”);}/***呈现表单模板脚本。**@自4.8.0起*/公共函数render_control_template_scripts(){?><script type=“text/html”id=“tmpl-widget-media-<?php echo esc_attr($this->id_base);?>-control”><#var elementIdPrefix='el'+字符串(Math.random())+'_'#><p><label for=“{{elementIdPrefix}}title”><?php esc_html_e('标题:');?></标签><input id=“{{elementIdPrefix}}title”type=“text”class=“widefat title”></p><div class=“media-widget-preview<?php-echo esc_attr($this->id_base);?>”><div class=“attachment-media-view”><button type=“button”class=“select-media button-add-media not-selected”><?php-echo eschtml($this->l10n[添加媒体]);?></按钮></div></div><p class=“media-widget-buttons”><button type=“button”class=“button edit-media selected”><?php-echo eschtml($this->l10n['edit_media']);?></按钮><?php if(!空($this->l10n['replace_media']):?><button type=“button”class=“button change-media select-media selected”><?php echo eschtml($this->l10n[“替换媒体”]);?></按钮><?php-endif;?></p><div class=“media-widget-fields”></div></script><?php(电话)}/***重置默认标签的缓存。**@自6.0.0起*/公共静态函数reset_default_labels(){自我::$default_description='';自我::$l10n_defaults=array();}/***小部件是否有要显示的内容。**@自4.8.0起**@param array$instance Widget实例道具。*@return bool小部件是否有内容。*/受保护函数has_content($instance){return($instance['attachment_id']&&'附件'===get_post_type($instance['atachment_id']))||$instance['url'];}/***返回小部件的默认描述。**@自6.0.0起**@return字符串*/受保护的静态函数get_default_description(){if(自身::$default_description){返回自身::$default_description;}self::$default_description=__('媒体项目');返回自身::$default_description;}/***返回小部件使用的默认本地化字符串。**@自6.0.0起**@return(字符串|数组)[]*/受保护的静态函数get_l10n_defaults(){if(!空(self::$l10n_defaults)){返回self::$l10n_defaults;}self::$l10n_defaults=数组(‘no_media_selected’=>__(‘未选择媒体’),“add_media”=>_x(“添加媒体”,“媒体小部件中按钮的标签”),“replace_media”=>_x(“replace media”,“媒体小部件中按钮的标签;长度最好不超过~13个字符”),“edit_media”=>_x(“编辑媒体”,“媒体小部件中按钮的标签;长度最好不超过~13个字符”),“add_to_widget”=>__(“添加到小工具”),“missing_attachment”=>短跑(/*转换器:%s:媒体库的URL*/__('找不到该文件。请检查您的<a href=“%s”>媒体库</a>并确保它未被删除。'),esc_url(管理员url('upload.php'))),/*转换器:%d:小工具计数*/“media_library_state_multi”=>_n_noop(“媒体小工具(%d)”,“媒体小玩意(%d)“),'media_library_state_single'=>__('媒体小工具'),“unsupported_file_type”=>__(“看起来这不是正确的文件类型。请链接到适当的文件。”),);return self::$l10n_defaults;}}

变更日志

版本描述
4.8.0介绍。

用户贡献的笔记

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