I want to keep the style attribute. $str is just an example, here’s my code:
$allowed_html = array(
'div' => array(
'title' => array(),
'class' => array(),
'style' => array()
)
);
$str="<div title="Click to continue' style="display:table">This is a button</div>';
wp_kses($str, $allowed_html );
$str will actually receive a bunch of html tags and attributes from a post. Then from there i want to strip out all tags and attributes leaving out only divs tags and style and title attributes
Thank you, MMK.
This is an older question, but here’s the answer for future generations:
WordPress will check the styles against a list of allowed properties and it will still strip the style
attribute if none of the styles are safe. The default allow list is:
text-align
margin
color
float
border
background
background-color
border-bottom
border-bottom-color
border-bottom-style
border-bottom-width
border-collapse
border-color
border-left
border-left-color
border-left-style
border-left-width
border-right
border-right-color
border-right-style
border-right-width
border-spacing
border-style
border-top
border-top-color
border-top-style
border-top-width
border-width
caption-side
clear
cursor
direction
font
font-family
font-size
font-style
font-variant
font-weight
height
letter-spacing
line-height
margin-bottom
margin-left
margin-right
margin-top
overflow
padding
padding-bottom
padding-left
padding-right
padding-top
text-decoration
text-indent
vertical-align
width
This list is, as with most things in WordPress, filtered! You can add display
to it as follows to let your code work as expected:
add_filter( 'safe_style_css', function( $styles ) {
$styles[] = 'display';
return $styles;
} );