zoukankan      html  css  js  c++  java
  • wordpress作者角色添加不了视频代码

    一直有一个很诡异的情况,就是在wordpress里不能加入视频代码,具体是在后台编辑器文本模式下添加视频代码后,切换到可视化能正常看到视频框,但保存后视频代码消息。

    仔细观察后发现作者不能添加,而编辑和管理员能添加。

    不吊胃口,先说解决方案:说穿了很简单,安装一个插件“用户角色编辑器“,将作者角色下的”不过滤html标签“勾上即可。

    下面是折腾过程:

    1. debug,发现如下代码调用顺序:

    wp_update_post->

    wp_insert_post->

    sanitize_post->

    sanitize_post_field->

    2. 在sanitize_post_field中调用

      $value = apply_filters("{$field_no_prefix}_save_pre", $value);

      调用了filter content_save_pre.

      搜索这个字符串后发现在核心函数kses_init_filters中加载的,如下

      add_filter('content_save_pre', 'wp_filter_post_kses');。

      是在kses_init_filters加载的。

      最终被如下代码调用:

    function kses_init() {
    kses_remove_filters();

    if (current_user_can('unfiltered_html') == false)
    kses_init_filters();
    }

    add_action('init', 'kses_init');
    add_action('set_current_user', 'kses_init');

    这时发现就是属于当前用户没有unfilter_html的这个权限了。

    解决方案

    1. 尝试将这个wp_filter_post_kses 利用函数remove_filter去掉,但这就出现一个add_filter与remove_filter的先后关系问题,但我加的地方remove_filter竟然在add_filter之前。

      这样子即使找到一个巧妙的地方将remove加进去,也太依赖这个先后关系,保不谁出大乱子。

    2. 直接给用户赋预unfilter_html权限,这样子一个缺点是将kses_init_filters里的一系列函数都给删掉了。考虑到这个是自己的博客,作者都是是指定的几个人,而且此解决方法易于理解,没有那么多绕绕,就决定用这种方法了。

    wordpress真强大,也真够折腾人的。

  • 相关阅读:
    Spring IOC三种注入方式(接口注入、setter注入、构造器注入)(摘抄)
    java设计模式之代理模式
    JAVA学习中好网站
    程序员学习能力提升三要素
    ognl中的#、%和$
    二级缓存
    hibernate主键自动生成
    专科考研学校要求一览表
    Chapter 3: Connector(连接器)
    Chapter 2: A Simple Servlet Container
  • 原文地址:https://www.cnblogs.com/hurner/p/3121165.html
Copyright © 2011-2022 走看看