【问题标题】:Administrator role in WordPress multisite is getting content stripped out when saving pagesWordPress 多站点中的管理员角色在保存页面时会删除内容
【发布时间】:2019-03-05 00:33:01
【问题描述】:

我设置了一个 WordPress 多站点,并尝试在某些 html 标记上保存带有数据属性的页面内容。超级用户可以毫无问题地保存,但是当管理员或较低角色保存时,它会删除标签中的数据属性。有没有办法让其他用户角色在 html 中保存数据属性?

需要明确的是,被剥离的不是 html 标签本身,而是数据属性,如下所示:

<p data-item="1">String</p>

以上内容保存为:

<p>String</p>

这也不是 tinymce 问题,我在 WYSIWYG 和源视图之间来回扫描切换并保持不变,只有当我保存页面时它才会被剥离,并且仅适用于低于多站点中的超级用户。

感谢任何帮助,谢谢!

【问题讨论】:

    标签: wordpress networking attributes custom-data-attribute multisite


    【解决方案1】:

    您遇到的问题是unfiltered_html 功能。如果您阅读该法典链接,您会注意到以下内容:

    注意:在 WordPress Multisite 中,只有超级管理员具有 unfiltered_html 功能。

    要解决此问题,您需要将unfiltered_html 功能添加到administrator 角色。如果您不知道该怎么做,请继续阅读:

    您需要使用add_cap() 函数。类似以下的内容就足够了。如果您的整个网络使用一个主题,您可以将以下代码粘贴到活动主题的functions.php 文件中。

    否则,您可能想使用Must-Use Plugin - 基本上创建一个类似custom-functions.php 的文件,将以下代码粘贴到其中,然后将其放入/wp-content/mu-plugins/(如果它不存在则创建它)。这将使它成为一个“必须使用的插件”,无论如何它总是被加载,并且不能被激活/停用。

    function so_51604149_add_cap(){
        $role = get_role( 'administrator' );
    
        if( $role ){
            $role->add_cap( 'unfiltered_html' ); 
        }
    }
    add_action( 'init', 'so_51604149_add_cap' );
    

    或者,有一些“用户权限”和“用户角色”类型的插件可以提供帮助。您问题的要点只是超级管理员是 WordPress MultiSite 上唯一具有unfiltered_html 功能的角色。

    【讨论】:

      【解决方案2】:

      Xhynk 引导我找到这个解决方案,谢谢!

      不推荐使用 unfiltered_html 功能,因此为了模拟该功能的作用,我在代码中添加了以下内容:

      add_action( 'init', 'kses_unfiltered_html' );
      function kses_unfiltered_html() {
          $user = wp_get_current_user();
      
          if ( current_user_can('edit_pages') )
              kses_remove_filters();
      }
      

      这正是我所需要的,它允许任何可以编辑页面的用户保存未经过滤的内容。其他人可能需要一个角色来代替edit_pages,例如:

      add_action( 'init', 'kses_unfiltered_html' );
      function kses_unfiltered_html() {
          $user = wp_get_current_user();
      
          if ( current_user_can('administrator') )
              kses_remove_filters();
      }
      

      【讨论】:

        【解决方案3】:

        这个过滤器对我有用:

        // Add the unfiltered_html capability back in to WordPress 3.0 multisite. o(8MNTW9B2WUi(ITf8N&0rc$
        function allow_unfiltered_html_multisite( $caps, $cap, $user_id, $args ) {
            if ( $user_id !== 0 && $cap === 'unfiltered_html' ) {
                $user_meta = get_userdata($user_id);
                if ( in_array( 'administrator', $user_meta->roles, true ) ) {
                    // Re-add the cap
                    unset( $caps );
                    $caps[] = $cap;
                }
            }
            return $caps;
        }
        add_filter('map_meta_cap', 'allow_unfiltered_html_multisite', 10, 4 );```
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-03-20
          • 2014-01-30
          • 2011-08-10
          • 1970-01-01
          • 2011-03-22
          • 2011-01-13
          • 1970-01-01
          • 2014-10-05
          相关资源
          最近更新 更多