【问题标题】:How to Include "onclick" Object in WordPress HTML如何在 WordPress HTML 中包含“onclick”对象
【发布时间】:2014-12-07 14:31:48
【问题描述】:

我正在尝试将“onclick”对象添加到触发事件的单站点(即而不是多站点)WordPress 中的页面。代码是:

<a href="#" onclick="_speakpipe_open_widget(); return false;">Send a voice message</a>

在尝试保存代码时,WordPress 会剥离 onclick 对象离开:

<a href="#">Send a voice message</a>

另一个论坛上的用户suggested 认为此限制仅适用于多站点非超级管理员用户。同样,这是一个只有一个管理员用户的单一站点。

据了解,WordPress 将 HTML 中的“onclick”去掉,以防止恶意代码。不过,有人知道如何解决这个问题吗?

谢谢。

【问题讨论】:

  • 我不确定是否有额外的 JS 过滤器,但 WordPress 曾经在过滤 HTML 之前查看一个名为 $allowedposttags 的列入白名单的全局数组。您可以尝试创建一个插件,或将代码添加到主题的 functions.php 文件(如果仍然存在),以将锚节点的 onclick 属性列入白名单。

标签: html wordpress


【解决方案1】:

您可以通过将锚标记更改为按钮并添加脚本来解决此问题。更多信息请参考此链接:Wordpress TinyMCE Strips OnClick & OnChange (need jQuery)

【讨论】:

  • 谢谢,@Anoop Asok。根据下面对 Arty-chan 的评论,我正在与主题制作人核实并将更新。
【解决方案2】:

通过解析,我假设您的意思是允许 onclick 属性。您需要小心这一点,因为修改允许的标签会对您的所有用户执行此操作。

您可以修改允许的标签和属性列表,将其添加到您的 functions.php 文件中:

function allow_onclick_content() {
  global $allowedposttags, $allowedtags;
  $newattribute = "onclick";

  $allowedposttags["a"][$newattribute] = true;
  $allowedtags["a"][$newattribute] = true; //unnecessary?
}
add_action( 'init', 'allow_onclick_content' );

我建议先尝试仅使用 $allowedposttags 来查看它是否适合您。根据这个other stackexchange post,如果您需要为 cmets 或可能未登录的用户使用 allowedtags,则应该只需要它,但是当我过去做类似的事情时,我需要它们两个都可以工作。

附带说明,如果您想要所有已允许的标签和属性的列表,请查看您的 /wp-includes/kses.php file

【讨论】:

  • 谢谢,@Arty-chan。我尝试在父主题和子主题中将其添加到我的 custom-functions.php 文件中(我的主题制作人强烈建议不要更改 functions.php 文件,以便新版本不会覆盖更改)。 onclick 内容继续被删除。我会与旁边的主题制作人核实是否有任何解决方案并会更新。
  • 您是创建者/维护者还是子主题?如果是这样,没有理由不只使用functions.php,因为在子主题中,它会添加到现有的父functions.php 而不是覆盖
【解决方案3】:

似乎使用当前的 Wordpress(我在 4.9.4 上),TinyMCE 直接在编辑器屏幕上进行过滤,而不是在提交表单时。 allowedtags 和 allowedposttags 似乎无关紧要,所以上面的解决方案对我来说并没有解决问题。

我开发的方法使用tiny_mce_before_init 过滤器来更改TinyMCE 中允许的标签。诀窍是添加extended_valid_elements 设置以及a 允许的元素的更新版本。

首先,在页面http://archive.tinymce.com/wiki.php/Configuration3x:valid_elements 中查找a 的当前值,现在是

a[rel|rev|charset|hreflang|tabindex|accesskey|type|name|href|target|title|class|onfocus|onblur]

并在末尾添加onclick 属性:

a[rel|rev|charset|hreflang|tabindex|accesskey|type|name|href|target|title|class|onfocus|onblur|onclick]

然后像这样在过滤器函数中使用它:

function allow_button_onclick_mce($settings) {
  $settings['extended_valid_elements'] =  "a[rel|rev|charset|hreflang|tabindex|accesskey|type|name|href|target|title|class|onfocus|onblur|onclick]";
  return $settings;
}
add_filter('tiny_mce_before_init', 'allow_button_onclick_mce');

您安装在 Wordpress 中的 functions.php 文件中。您可以通过在编辑页面上切换文本和视觉视图来查看它的实际效果。如果没有扩展列表,onclick 就会消失。有了它,它仍然存在。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-09
    • 1970-01-01
    • 1970-01-01
    • 2016-12-06
    • 1970-01-01
    相关资源
    最近更新 更多