1 | <?php(电话) |
---|
2 | /** |
---|
三 | *小工具API:WP_Widget_Custom_HTML类 |
---|
4 | * |
---|
5 | *@package WordPress |
---|
6 | *@subpackage小工具 |
---|
7 | *@自4.8.1起 |
---|
8 | */ |
---|
9 | |
---|
10 | /** |
---|
11 | *用于实现自定义HTML小部件的核心类。 |
---|
12 | * |
---|
13 | *@自4.8.1起 |
---|
14 | * |
---|
15 | *@参见WP_Widget |
---|
16 | */ |
---|
17 | 班 WP_小部件_自定义_HTML 延伸 WP_小工具 { |
---|
18 | |
---|
19 | /** |
---|
20 | *小部件是否已注册。 |
---|
21 | * |
---|
22 | *@自4.9.0起 |
---|
23 | *@var bool |
---|
24 | */ |
---|
25 | 受保护的 $已注册 = 假; |
---|
26 | |
---|
27 | /** |
---|
28 | *默认实例。 |
---|
29 | * |
---|
30 | *@自4.8.1起 |
---|
31 | *@var数组 |
---|
32 | */ |
---|
33 | 受保护的 $默认实例 = 阵列( |
---|
34 | '标题' => '', |
---|
35 | '内容' => '', |
---|
36 | ); |
---|
37 | |
---|
38 | /** |
---|
39 | *设置新的自定义HTML小部件实例。 |
---|
40 | * |
---|
41 | *@自4.8.1起 |
---|
42 | */ |
---|
43 | 公众的 功能 __构造() { |
---|
44 | $widget_ops = 阵列( |
---|
45 | '类名' => “widget_custom_html”, |
---|
46 | '说明' => __( “任意HTML代码。” ), |
---|
47 | '自定义_选择_刷新' => 真的, |
---|
48 | “show_instance_in_rest” => 真的, |
---|
49 | ); |
---|
50 | $控制选项 = 阵列( |
---|
51 | '宽度' => 400, |
---|
52 | “高度” => 350, |
---|
53 | ); |
---|
54 | 父母时间:__构造( '自定义html', __( '自定义HTML' ), $小部件_操作, $控制选项 ); |
---|
55 | } |
---|
56 | |
---|
57 | /** |
---|
58 | *注册此小部件类的所有小部件实例时,添加用于排队资产的挂钩。 |
---|
59 | * |
---|
60 | *@自4.9.0起 |
---|
61 | * |
---|
62 | *@param int$number可选。此小部件实例的唯一订单号 |
---|
63 | *与同一类的其他实例进行比较。默认值为1。 |
---|
64 | */ |
---|
65 | 公众的 功能 _寄存器_一( $个 = -1 ) { |
---|
66 | 父母时间:_寄存器_一( $个 ); |
---|
67 | 如果 ( $这个->已注册 ) { |
---|
68 | 返回; |
---|
69 | } |
---|
70 | $这个->已注册 = 真的; |
---|
71 | |
---|
72 | /* |
---|
73 | *请注意,自定义程序中的小部件组件也可以 |
---|
74 | *WP_Customize_widgets::print_scripts()中的“admin_print_scripts-widgets.php”操作。 |
---|
75 | */ |
---|
76 | 添加操作(_A)( “admin_print_scripts-widgets.php”, 阵列( $这个, '排队管理员脚本' ) ); |
---|
77 | |
---|
78 | /* |
---|
79 | *请注意,自定义程序中的小部件组件也可以 |
---|
80 | *WP_Customize_widgets::print_footer_scripts()中的“admin_footer-widgets.php”操作。 |
---|
81 | */ |
---|
82 | 添加操作(_A)( 'admin_footer-widgets.php', 阵列( “WP_Widget_Custom_HTML”, 'render_control_template_scripts' ) ); |
---|
83 | |
---|
84 | //请注意,此操作用于确保帮助文本添加到末尾。 |
---|
85 | 添加操作(_A)( 'admin_head-widgets.php', 阵列( “WP_Widget_Custom_HTML”, '添加帮助文本' ) ); |
---|
86 | } |
---|
87 | |
---|
88 | /** |
---|
89 | *筛选库短代码属性。 |
---|
90 | * |
---|
91 | *阻止网站的所有附件显示在 |
---|
92 | *$post上下文不可用的非奇异模板。 |
---|
93 | * |
---|
94 | *@自4.9.0起 |
---|
95 | * |
---|
96 | *@param array$attrs属性。 |
---|
97 | *@return数组属性。 |
---|
98 | */ |
---|
99 | 公众的 功能 _过滤器库短代码属性( $属性 ) { |
---|
100 | 如果 ( ! 是奇异的(_S)() && 空的( $属性[“id”] ) && 空的( $属性[“包含”] ) ) { |
---|
101 | $属性[“id”] = -1; |
---|
102 | } |
---|
103 | 返回 $属性; |
---|
104 | } |
---|
105 | |
---|
106 | /** |
---|
107 | *输出当前自定义HTML小部件实例的内容。 |
---|
108 | * |
---|
109 | *@自4.8.1起 |
---|
110 | * |
---|
111 | *@global WP_Post$Post全局发布对象。 |
---|
112 | * |
---|
113 | *@param array$args显示参数,包括“before_title”、“after_title”、, |
---|
114 | *'before_widget'和'after_widget]。 |
---|
115 | *当前自定义HTML小部件实例的@param array$instance设置。 |
---|
116 | */ |
---|
117 | 公众的 功能 小装置( $个参数, $实例 ) { |
---|
118 | 全球的 $帖子; |
---|
119 | |
---|
120 | //覆盖全局$post,以便在一致的上下文中应用筛选器(和短代码)。 |
---|
121 | $original_post(原始_发布) = $帖子; |
---|
122 | 如果 ( 是奇异的(_S)() ) { |
---|
123 | //确保post始终是单个查询中的查询对象(而不是来自未能清理全局$post的另一个子查询)。 |
---|
124 | $帖子 = 获取查询对象(); |
---|
125 | } 其他的 { |
---|
126 | //在小部件渲染期间将$post全局设置为null,以防止在存档查询中使用意外上下文运行短代码。 |
---|
127 | $帖子 = 无效的; |
---|
128 | } |
---|
129 | |
---|
130 | //防止从媒体库中转储所有附件。 |
---|
131 | 添加筛选器( “shortcode_atts_gallery”, 阵列( $这个, '过滤库短代码属性' ) ); |
---|
132 | |
---|
133 | $实例 = 阵列_合并( $这个->默认实例(_I), $实例 ); |
---|
134 | |
---|
135 | /**这个过滤器记录在wp-includs/widget/class-wp-widget-pages.php中*/ |
---|
136 | $标题 = 应用筛选器( '小部件_标题', $实例['标题'], $实例, $这个->id基础(_B) ); |
---|
137 | |
---|
138 | //准备看起来像普通文本小部件的实例数据。 |
---|
139 | $模拟_文本_小部件_实例 = 阵列_合并( |
---|
140 | $实例, |
---|
141 | 阵列( |
---|
142 | “文本” => 发行( $实例['内容'] ) ? $实例['内容'] : '', |
---|
143 | '筛选器' => 假, //因为没有应用wpauto。 |
---|
144 | “可视化” => 假, //因为它不是在TinyMCE中创建的。 |
---|
145 | ) |
---|
146 | ); |
---|
147 | 未设置( $模拟_文本_小部件_实例['内容'] ); //已移至“文本”属性。 |
---|
148 | |
---|
149 | /**该过滤器记录在wp-includes/widgets/class-wp-widget-text.php中*/ |
---|
150 | $内容 = 应用筛选器( '小部件_文本', $实例['内容'], $simulated_text_widget_instance(模拟文本桥实例), $这个 ); |
---|
151 | |
---|
152 | //将“noopener”关系添加到具有目标的所有HTMLA元素中,而不重复值。 |
---|
153 | $内容 = wp_目标链接_rel( $内容 ); |
---|
154 | |
---|
155 | /** |
---|
156 | *过滤自定义HTML小部件的内容。 |
---|
157 | * |
---|
158 | *@自4.8.1起 |
---|
159 | * |
---|
160 | *@param string$content小部件内容。 |
---|
161 | *@param array$instance当前小部件的设置数组。 |
---|
162 | *@param WP_Widget_Custom_HTML$Widget当前自定义HTML小部件实例。 |
---|
163 | */ |
---|
164 | $内容 = 应用筛选器( '小部件自定义内容', $内容, $实例, $这个 ); |
---|
165 | |
---|
166 | //还原全局日志。 |
---|
167 | $帖子 = $original_post(原始_发布); |
---|
168 | 删除过滤器( “shortcode_atts_gallery”, 阵列( $这个, '过滤库短代码属性' ) ); |
---|
169 | |
---|
170 | //将Text小部件的容器类名与该小部件的类名一起注入,以实现主题样式兼容性。 |
---|
171 | $args美元[“before_widget”] = preg_替换( '/(?<=\sclass=[“\'])/', '小部件_文本', $个参数[“before_widget”] ); |
---|
172 | |
---|
173 | 回声 $个参数[“before_widget”]; |
---|
174 | 如果 ( ! 空的( $标题 ) ) { |
---|
175 | 回声 $个参数[“before_title”] . $标题 . $args美元['标题之后']; |
---|
176 | } |
---|
177 | 回声 '<div class=“textwidget custom-html-widget”>'; //textwidget类用于主题样式兼容性。 |
---|
178 | 回声 $内容; |
---|
179 | 回声 '</div>'; |
---|
180 | 回声 $个参数[“after_widget”]; |
---|
181 | } |
---|
182 | |
---|
183 | /** |
---|
184 | *处理当前自定义HTML小部件实例的更新设置。 |
---|
185 | * |
---|
186 | *@自4.8.1起 |
---|
187 | * |
---|
188 | *@param array$new_instance用户通过输入此实例的新设置 |
---|
189 | *WP_Widget::form()。 |
---|
190 | *@param array$old_instance此实例的旧设置。 |
---|
191 | *@return array Settings可保存,bool false可取消保存。 |
---|
192 | */ |
---|
193 | 公众的 功能 更新( $新实例, $old_instance(旧实例) ) { |
---|
194 | $实例 = 阵列_合并( $这个->默认实例(_I), $old_instance(旧实例) ); |
---|
195 | $实例['标题'] = 清理文本字段( $新实例['标题'] ); |
---|
196 | 如果 ( 当前用户can( '未感兴趣.html' ) ) { |
---|
197 | $实例['内容'] = $新实例['内容']; |
---|
198 | } 其他的 { |
---|
199 | $实例['内容'] = wp_kses_post(服务器)( $新实例['内容'] ); |
---|
200 | } |
---|
201 | 返回 $实例; |
---|
202 | } |
---|
203 | |
---|
204 | /** |
---|
205 | *加载小部件控件所需的脚本和样式。 |
---|
206 | * |
---|
207 | *@自4.9.0起 |
---|
208 | */ |
---|
209 | 公众的 功能 队列管理员脚本() { |
---|
210 | $设置 = wp_enqueue_code_editor( |
---|
211 | 阵列( |
---|
212 | “类型” => '文本/html', |
---|
213 | '代码镜像' => 阵列( |
---|
214 | '缩进单位' => 2, |
---|
215 | '选项卡大小' => 2, |
---|
216 | ), |
---|
217 | ) |
---|
218 | ); |
---|
219 | |
---|
220 | wp_排队_脚本( '自定义html小部件' ); |
---|
221 | wp_add_inline脚本( '自定义html小部件', 把格式数据写成串( 'wp.customHtmlWidgets.idBases.push(%s);', wp_json编码( $这个->id基础(_B) ) ) ); |
---|
222 | |
---|
223 | 如果 ( 空的( $设置 ) ) { |
---|
224 | $设置 = 阵列( |
---|
225 | “已禁用” => 真的, |
---|
226 | ); |
---|
227 | } |
---|
228 | wp_add_inline脚本( '自定义html小部件', 把格式数据写成串( 'wp.customHtmlWidgets.init(%s);', wp_json编码( $设置 ) ), '之后' ); |
---|
229 | |
---|
230 | 1100亿美元 = 阵列( |
---|
231 | '错误通知' => 阵列( |
---|
232 | /*转换器:%d:错误计数*/ |
---|
233 | “单数” => _n个( '有%d个错误,必须先修复才能保存。', '有%d个错误必须先修复,然后才能保存。', 1 ), |
---|
234 | /*转换器:%d:错误计数*/ |
---|
235 | “复数” => _n个( '有%d个错误,必须先修复才能保存。', '有%d个错误必须先修复,然后才能保存。', 2 ), |
---|
236 | //@todo这是缺乏的,因为有些语言有专用的双重形式。有关JS中复数的正确处理,请参阅#20491。 |
---|
237 | ), |
---|
238 | ); |
---|
239 | wp_add_inline脚本( '自定义html小部件', 把格式数据写成串( 'jQuery.extend(wp.customHtmlWidgets.l10n,%s);', wp_json编码( 1100亿美元 ) ), “之后” ); |
---|
240 | } |
---|
241 | |
---|
242 | /** |
---|
243 | *输出自定义HTML小部件设置表单。 |
---|
244 | * |
---|
245 | *@自4.8.1起 |
---|
246 | *@自4.9.0起表单仅包含隐藏的同步输入。有关控件UI的信息,请参见“WP_Widget_Custom_HTML::render_control_template_scripts()”。 |
---|
247 | * |
---|
248 | *@请参阅WP_Widget_Custom_HTML::render_control_template_scripts() |
---|
249 | * |
---|
250 | *@param array$instance当前实例。 |
---|
251 | */ |
---|
252 | 公众的 功能 形式( $实例 ) { |
---|
253 | $实例 = wp_parse_args( (阵列) $实例, $这个->默认实例(_I) ); |
---|
254 | ?> |
---|
255 | <输入id=“<?php(电话) 回声 $这个->获取字段id( '标题' ); ?>“name=”<?php(电话) 回声 $这个->获取字段名称( '标题' ); ?>“class=”title sync-input“type=”hidden“value=”<?php(电话) 回声 esc属性( $实例['标题'] ); ?>" /> |
---|
256 | <textarea id=“<?php(电话) 回声 $这个->获取字段id( '内容' ); ?>“name=”<?php(电话) 回声 $这个->获取字段名称( '内容' ); ?>“class=”content sync-input“隐藏><?php(电话) 回声 esc_文本区域( $实例['内容'] ); ?></text区域> |
---|
257 | <?php(电话) |
---|
258 | } |
---|
259 | |
---|
260 | /** |
---|
261 | *呈现表单模板脚本。 |
---|
262 | * |
---|
263 | *@自4.9.0起 |
---|
264 | */ |
---|
265 | 公众的 静止的 功能 渲染控制模板脚本() { |
---|
266 | ?> |
---|
267 | <script type=“text/html”id=“tmpl-widget-custom-html-control-fields”> |
---|
268 | <#var elementIdPrefix='el'+字符串(Math.random()).replace(/\D/g,'')+'_'#> |
---|
269 | <p> |
---|
270 | <label for=“{{elementIdPrefix}}title”><?php(电话) esc_html_e( '标题:' ); ?></label> |
---|
271 | <input id=“{{elementIdPrefix}}title”type=“text”class=“widefat title”> |
---|
272 | </p> |
---|
273 | |
---|
274 | <p> |
---|
275 | <label for=“{{elementIdPrefix}}content”id=“{{elementIdPrefix}}content label”><?php(电话) esc_html_e文件( '内容£º' ); ?></label> |
---|
276 | <textarea id=“{{elementIdPrefix}}-content”class=“widefat-code-content”rows=“16”cols=“20”></textarea> |
---|
277 | </p> |
---|
278 | |
---|
279 | <?php(电话) 如果 ( ! 当前用户can( '未筛选_html' ) ) : ?> |
---|
280 | <?php(电话) |
---|
281 | $probably_unsafe_html = 阵列( '脚本', “iframe”, '表单', “输入”, “样式” ); |
---|
282 | $allowed_html = wp_kses_allowed_html( “发布” ); |
---|
283 | $不允许_html = 阵列差异( $probably_unsafe_html, 数组键( $allowed_html ) ); |
---|
284 | ?> |
---|
285 | <?php(电话) 如果 ( ! 空的( $不允许_html ) ) : ?> |
---|
286 | <#if(data.codeEditorDisabled){#> |
---|
287 | <p> |
---|
288 | <?php(电话) _e(电子)( '不允许使用某些HTML标记,包括:' ); ?> |
---|
289 | <代码><?php(电话) 回声 内爆( “</code>,<code>”, $不允许_html ); ?></code> |
---|
290 | </p> |
---|
291 | <#}#> |
---|
292 | <?php(电话) 结尾; ?> |
---|
293 | <?php(电话) 结尾; ?> |
---|
294 | |
---|
295 | <div class=“code-editor-error-container”> |
---|
296 | </script> |
---|
297 | <?php(电话) |
---|
298 | } |
---|
299 | |
---|
300 | /** |
---|
301 | *将帮助文本添加到小部件管理屏幕。 |
---|
302 | * |
---|
303 | *@自4.9.0起 |
---|
304 | */ |
---|
305 | 公众的 静止的 功能 添加帮助文本() { |
---|
306 | $屏幕 = 获取当前屏幕(); |
---|
307 | |
---|
308 | $内容 = “<p>”; |
---|
309 | $内容 .= __( '使用自定义HTML小部件将任意HTML代码添加到小部件区域。' ); |
---|
310 | $内容 .= “</p>”; |
---|
311 | |
---|
312 | 如果 ( “false” !== wp_获取当前用户()->语法突出显示 ) { |
---|
313 | $内容 .= “<p>”; |
---|
314 | $内容 .= 把格式数据写成串( |
---|
315 | /*翻译人员:1:链接到用户配置文件,2:其他链接属性,3:辅助功能文本*/ |
---|
316 | __( '编辑字段自动突出显示代码语法。您可以在<a href=“%1$s”%2$s>用户配置文件%3$s中禁用此功能,以便在纯文本模式下工作。' ), |
---|
317 | esc_url( 获取编辑配置文件url() ), |
---|
318 | 'class=“external-link”target=“_blank”', |
---|
319 | 把格式数据写成串( |
---|
320 | '<span class=“screen-reader-text”>%s</span>', |
---|
321 | /*翻译器:隐藏的辅助功能文本*/ |
---|
322 | __( '(在新选项卡中打开)' ) |
---|
323 | ) |
---|
324 | ); |
---|
325 | $内容 .= “</p>”; |
---|
326 | |
---|
327 | $内容 .= '<p id=“editor-keyboard-trap-help-1”>' . __( '使用键盘导航时:' ) . “</p>”; |
---|
328 | $内容 .= “<ul>”; |
---|
329 | $内容 .= '<li id=“editor-keyboard-trap-help-2”>' . __( '在编辑区域中,Tab键输入制表符。' ) . “</li>”; |
---|
330 | $内容 .= '<li id=“editor-keyboard-trap-help-3”>' . __( '要离开此区域,请按Esc键,然后按Tab键。' ) . “</li>”; |
---|
331 | $内容 .= '<li id=“editor-keyboard-trap-help-4”>' . __( '屏幕阅读器用户:在窗体模式下,可能需要按两次Esc键。' ) . “</li>”; |
---|
332 | $内容 .= “</ul>”; |
---|
333 | } |
---|
334 | |
---|
335 | $屏幕->添加帮助标签( |
---|
336 | 阵列( |
---|
337 | “id” => '自定义html_widget', |
---|
338 | '标题' => __( '自定义HTML小工具' ), |
---|
339 | '内容' => $内容, |
---|
340 | ) |
---|
341 | ); |
---|
342 | } |
---|
343 | } |
---|