Last active
June 19, 2024 13:50
-
-
Save kellenmace/9e6a6fbb92ec75940f23d2a6f01c9b59 to your computer and use it in GitHub Desktop.
Add unfiltered_html Capability to Admins or Editors in WordPress Multisite
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* Enable unfiltered_html capability for Editors. | |
* | |
* @param array $caps The user's capabilities. | |
* @param string $cap Capability name. | |
* @param int $user_id The user ID. | |
* @return array $caps The user's capabilities, with 'unfiltered_html' potentially added. | |
*/ | |
function km_add_unfiltered_html_capability_to_editors( $caps, $cap, $user_id ) { | |
if ( 'unfiltered_html' === $cap && user_can( $user_id, 'editor' ) ) { | |
$caps = [ 'unfiltered_html' ]; | |
} | |
return $caps; | |
} | |
add_filter( 'map_meta_cap', 'km_add_unfiltered_html_capability_to_editors', 1, 3 ); |
I am able to get it it work with this code in WP 5.4. Maybe you just need to add administrator? (I don't think my implementation of 4 arguments affect the result)
<?php
function multisite_restore_unfiltered_html( $caps, $cap, $user_id, ...$args ) {
if ( 'unfiltered_html' === $cap && (user_can( $user_id, 'editor' ) || user_can( $user_id, 'administrator' ) ) ) {
$caps = array( 'unfiltered_html' );
}
return $caps;
}
add_filter( 'map_meta_cap', 'multisite_restore_unfiltered_html', 1, 4 );
For some reason the above didn't work, I think it might have something to do with the user_can function, or that I am using WP Multi-Site, or it doesn't work when using WP Gutenberg blocks. However the below does work for me with Gutenberg blocks on WP 6.4.3
add_filter(
'map_meta_cap',
function ($caps, $cap) {
$user = wp_get_current_user();
if ($cap === 'unfiltered_html' && !empty($user->roles) && (in_array('administrator', $user->roles, true) || in_array('editor', $user->roles, true))) {
$caps = array('unfiltered_html');
}
return $caps;
},
10,
2
);
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
@filak No, I'm not sure. If you figure it out, please drop a comment here and I'll update the blog post that goes along with this gist (https://kellenmace.com/add-unfiltered_html-capability-to-admins-or-editors-in-wordpress-multisite/) with the new method. Thanks.