WordPress多站点中的管理员角色正在保存页面时剥离内容

时间:2018-07-31 01:05:51

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

我已经设置了WordPress多站点,并且正在尝试使用某些html标签上的数据属性保存页面内容。超级用户可以毫无问题地进行保存,但是,当管理员或下级角色保存时,超级用户将删除标记中的数据属性。有什么方法可以允许其他用户角色将数据属性保存在html中?

请注意,剥离的不是html标记本身,而是数据属性,如下所示:

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

以上内容另存为:

<p>String</p>

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

感谢您的帮助,谢谢!

3 个答案:

答案 0 :(得分: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功能的角色。

答案 1 :(得分:0)

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();
}

答案 2 :(得分:0)

此过滤器对我有用:

// 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 );```