如何在WordPress HTML中包含"onclick"对象



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

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

当试图保存代码时,WordPress剥离onclick对象,留下:

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

另一个论坛上的一位用户建议,此限制应仅适用于多站点非超级管理员用户。同样,这是一个只有一个管理员用户的siglesite。

据了解,WordPress从HTML中删除"onclick"是为了防止恶意代码。不过,有人知道如何解决这个问题吗?

谢谢。

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

我开发的方法使用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就会消失。有了它,它仍然存在。

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

通过解析,我假设您的意思是允许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' );

我建议先用$allowedtosttags试试,看看这是否适合你。根据stackexchange的另一篇帖子,只有在评论或可能是未登录用户需要allowedtag的情况下,你才需要allowetdag,但当我过去做类似的事情时,我需要这两个标签才能工作。

附带说明一下,如果您想要所有已允许的标记和属性的列表,请查看/wp-includes/kses.php文件内部。

最新更新