Guest User

Wordpress shortcode_unautop

a guest
Aug 21st, 2013
128
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function shortcode_unautop( $pee ) {
  2.     global $shortcode_tags;
  3.  
  4.     if ( empty( $shortcode_tags ) || !is_array( $shortcode_tags ) ) {
  5.         return $pee;
  6.     }
  7.  
  8.     $tagregexp = join( '|', array_map( 'preg_quote', array_keys( $shortcode_tags ) ) );
  9.  
  10.     $pattern =
  11.           '/'
  12.         . '<p>'                              // Opening paragraph
  13.         . '\\s*+'                            // Optional leading whitespace
  14.         . '('                                // 1: The shortcode
  15.         .     '\\['                          // Opening bracket
  16.         .     "($tagregexp)"                 // 2: Shortcode name
  17.         .     '(?![\\w-])'                   // Not followed by word character or hyphen
  18.                                              // Unroll the loop: Inside the opening shortcode tag
  19.         .     '[^\\]\\/]*'                   // Not a closing bracket or forward slash
  20.         .     '(?:'
  21.         .         '\\/(?!\\])'               // A forward slash not followed by a closing bracket
  22.         .         '[^\\]\\/]*'               // Not a closing bracket or forward slash
  23.         .     ')*?'
  24.         .     '(?:'
  25.         .         '\\/\\]'                   // Self closing tag and closing bracket
  26.         .     '|'
  27.         .         '\\]'                      // Closing bracket
  28.         .         '(?:'                      // Unroll the loop: Optionally, anything between the opening and closing shortcode tags
  29.         .             '[^\\[]*+'             // Not an opening bracket
  30.         .             '(?:'
  31.         .                 '\\[(?!\\/\\2\\])' // An opening bracket not followed by the closing shortcode tag
  32.         .                 '[^\\[]*+'         // Not an opening bracket
  33.         .             ')*+'
  34.         .             '\\[\\/\\2\\]'         // Closing shortcode tag
  35.         .         ')?'
  36.         .     ')'
  37.         . ')'
  38.         . '\\s*+'                            // optional trailing whitespace
  39.         . '<\\/p>'                           // closing paragraph
  40.         . '/s';
  41.     //this compiles the regex <p>\s*+(\[(shortcode1|shorcode2|etc)(?![\w-])[^\]\/]*(?:\/(?!\])[^\]\/]*)*?(?:\/\]|\](?:[^\[]*+(?:\[(?!\/\2\])[^\[]*+)*+\[\/\2\])?))\s*+<\/p>
  42.     return preg_replace( $pattern, '$1', $pee );
  43. }
RAW Paste Data