'tinyMCE_js', 'tinyMCE\.php/([a-zA-Z_][a-zA-Z0-9_-]*)' => 'tinyMCE_php&tag=$matches[1]', ); foreach ( $rules as $regex => $redirect ) { add_rewrite_rule( sprintf( '^skelet/%s$', $regex ) , sprintf( 'index.php?skelet=%s', $redirect ) , 'top' ); } } // Add the query_var "skelet" and "tag" add_filter( 'query_vars', 'skelet_add_query_vars' ); function skelet_add_query_vars( $vars ) { $vars[] = 'skelet'; $vars[] = 'tag'; return $vars; } // Capture requests and serve files add_action( 'parse_request', 'skelet_sniff_requests' ); function skelet_sniff_requests() { global $wp; $serve = K::get_var( 'skelet', $wp->query_vars ); $tag = K::get_var( 'tag', $wp->query_vars ); switch ( $serve ) { case 'tinyMCE_php': $shortcode = K::get_var( $tag, $GLOBALS[ 'paf_shortcodes' ] ); // Exist if shortcode doesn't exist or doesn't have parameters if( ! $shortcode || ! K::get_var( 'parameters', $shortcode ) ) { exit; } // Show HTML for shortcode popup window header( 'Content-Type: text/html; charset=utf-8'); die( call_user_func( 'skelet_' . $serve, $tag ) ); case 'tinyMCE_js': header( 'Content-Type: application/javascript; charset=utf-8' ); die( call_user_func( 'skelet_' . $serve ) ); } } // Add buttons to WordPress editor add_filter( 'mce_buttons', 'skelet_tinyMCE_buttons' ); function skelet_tinyMCE_buttons( $buttons ) { $shortcodes = K::get_var( 'paf_shortcodes', $GLOBALS, array() ); return array_merge( $buttons, array_keys( $shortcodes ) ); } // output for "skelet/tinyMCE.php/$tag" function skelet_tinyMCE_php( $tag ) { global $paf_shortcodes; $select2_enqueued = false; $protocol = is_ssl() ? 'https' : 'http'; // Head printf( '' ); // CSS printf( '', admin_url( 'css/common' . ( is_rtl() ? '-rtl' : '' ) . '.css' ) ); printf( '', admin_url( 'css/forms' . ( is_rtl() ? '-rtl' : '' ) . '.css' ) ); printf( '', site_url( 'wp-includes/css/dashicons' . ( is_rtl() ? '-rtl' : '' ) . '.min.css' ) ); printf( '', site_url( 'wp-includes/css/buttons' . ( is_rtl() ? '-rtl' : '' ) . '.min.css' ) ); print( '' ); paf_asset_css( 'paf' ); // JS printf( '', "$protocol://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.1/jquery.min.js" ); printf( '', "$protocol://cdnjs.cloudflare.com/ajax/libs/jquery.serializeJSON/1.2.0/jquery.serializeJSON.min.js" ); paf_asset_js( 'paf' ); ob_start(); ?> ' ); // Fields $parameters = $paf_shortcodes[ $tag ]['parameters']; echo '
'; foreach ( $parameters as $k => $v ) { // Validate title $v[ 'title' ] = k::get_var( 'title', $v, $k ); // Print option paf_print_option( $k, $v ); if( 'select' === K::get_var( 'type', $v ) ) { printf( '', "$protocol://cdnjs.cloudflare.com/ajax/libs/select2/3.5.0/select2.min.css" ); printf( '', "$protocol://cdnjs.cloudflare.com/ajax/libs/select2/3.5.0/select2.js" ); print( "" ); $select2_enqueued = true; } } // Content field if ( K::get_var( 'wrap', $paf_shortcodes[ $tag ] ) ) { K::textarea( 'content' , array( 'class' => 'large-text', 'id' => 'content' ) , array( 'format' => '

' ) ); } // Buttons echo '
'; echo '

'; echo '
'; echo '

'; K::input( 'submit' , array( 'class' => 'button button-large button-primary aligncenter ', 'type' => 'submit', 'value' => 'Add shortcode', ) ); echo ' '; K::wrap( 'Reset' ,array( 'class' => 'button button-large paf-reset', 'href' => '#', 'id' => 'paf-reset', ) , array( 'in' => 'a' ) ); echo '

'; // Close document echo '
'; // C ya! return ob_get_clean(); } // Output for "skelet/tinyMCE.js" function skelet_tinyMCE_js() { global $paf_shortcodes; $minify = true; // Prepare a shortcodes object for JavaScript $shortcodes = $paf_shortcodes; foreach ( $paf_shortcodes as $tag => $settings ) { // Is it a menu button $shortcodes[ $tag ][ 'isMenu' ] = ( bool ) K::get_var( 'menu', $shortcodes[ $tag ] ); $shortcodes[ $tag ][ 'isMenu' ] && $shortcodes[ $tag ][ '_type' ] = 'menu'; // Or a modal window $shortcodes[ $tag ][ 'isModal' ] = ( bool ) K::get_var( 'parameters', $shortcodes[ $tag ] ); $shortcodes[ $tag ][ 'isModal' ] && $shortcodes[ $tag ][ '_type' ] = 'modal'; $shortcodes[ $tag ][ 'parameters' ] = array(); unset( $shortcodes[ $tag ][ 'parameters' ] ); // or a normal button 0 || $shortcodes[ $tag ][ 'isMenu' ] || $shortcodes[ $tag ][ 'isModal' ] || ( 1 && $shortcodes[ $tag ][ 'isBasic' ] = true && $shortcodes[ $tag ][ '_type' ] = 'basic' ); // Get parent if any $parent = K::get_var( 'parent', $shortcodes[ $tag ] ); if ( $parent && array_key_exists( $parent, $shortcodes ) ) { $shortcodes[ $tag ][ 'isChildOf' ] = $parent; } } ob_start(); ?> /*