WordPress.org

Make WordPress Core

Ticket #18311: 18311.patch

File 18311.patch, 1.0 KB (added by kurtpayne, 2 years ago)

Allow a subset of HTML in [caption] shortcode

  • wp-includes/media.php

     
    737737                'caption' => '' 
    738738        ), $attr)); 
    739739 
     740        // Restore the original HTML 
     741        $_caption = html_entity_decode($caption); 
     742         
     743        // Only allow a subset of tags 
     744        $allowed_tags = array('strong', 'em', 'a'); 
     745         
     746        // Set those tags aside 
     747        if ( preg_match_all('/<\/?([a-zA-Z]+).*?>/x', $_caption, $matches) ) { 
     748                $i = 0; 
     749                $searches = array(); 
     750                $replacements = array();  
     751                foreach ( $matches[0] as $k => $v ) { 
     752                        if (in_array($matches[1][$k], $allowed_tags) ) { 
     753                                $_caption = str_replace($v, 'tag-' . $i, $_caption); 
     754                                $searches[] = 'tag-' . $i++; 
     755                                $replacements[] = $v; 
     756                        } 
     757                } 
     758                 
     759                // Re-encode the caption 
     760                $_caption = htmlentities($_caption); 
     761 
     762                // Restore the allowed HTML 
     763                $caption = str_replace($searches, $replacements, $_caption); 
     764        } 
     765 
    740766        if ( 1 > (int) $width || empty($caption) ) 
    741767                return $content; 
    742768