Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WordPress multisite中的管理员角色是在保存页面时删除内容_Wordpress_Networking_Attributes_Custom Data Attribute_Multisite - Fatal编程技术网

WordPress multisite中的管理员角色是在保存页面时删除内容

WordPress multisite中的管理员角色是在保存页面时删除内容,wordpress,networking,attributes,custom-data-attribute,multisite,Wordpress,Networking,Attributes,Custom Data Attribute,Multisite,我有一个WordPress多站点设置,我正试图用一些html标签上的数据属性保存页面内容。超级用户可以毫无问题地保存,但是当管理员或较低级别的角色保存时,它会删除标记中的数据属性。是否有任何方法允许其他用户角色在html中保存数据属性 需要明确的是,剥离的不是html标记本身,而是数据属性,如下所示: <p data-item="1">String</p> 字符串 以上内容将另存为: <p>String</p> 字符串 这也不是一个小问题,

我有一个WordPress多站点设置,我正试图用一些html标签上的数据属性保存页面内容。超级用户可以毫无问题地保存,但是当管理员或较低级别的角色保存时,它会删除标记中的数据属性。是否有任何方法允许其他用户角色在html中保存数据属性

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

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

字符串

以上内容将另存为:

<p>String</p>
字符串

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


感谢您的帮助,谢谢

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

注意:在WordPress Multisite中,只有超级管理员具有
未过滤html
功能

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

你需要利用这个函数。像下面这样的东西就足够了。如果整个网络使用一个主题,则可以将以下代码粘贴到活动主题的
functions.php
文件中

否则,您可能需要使用-基本上创建一个文件,如
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上唯一具有
未过滤html
功能的角色。

Xhynk让我找到了这个解决方案,谢谢

未过滤的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();
}
这就是我所需要的,它允许任何可以编辑页面的用户保存未过滤的内容。其他人可能需要一个角色来代替编辑页面,例如:

add_action( 'init', 'kses_unfiltered_html' );
function kses_unfiltered_html() {
    $user = wp_get_current_user();

    if ( current_user_can('administrator') )
        kses_remove_filters();
}

这个过滤器对我有效:

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