Ticket #10337: 10337.diff

File 10337.diff, 11.3 KB (added by ryan, 4 years ago)
  • wp-includes/default-filters.php

     
    194194add_action('admin_print_styles', 'print_admin_styles', 20); 
    195195add_action('init', 'smilies_init', 5); 
    196196add_action( 'plugins_loaded', 'wp_maybe_load_widgets', 0 ); 
     197add_action( 'plugins_loaded', 'wp_maybe_load_shortcodes', 0 ); 
    197198add_action( 'shutdown', 'wp_ob_end_flush_all', 1); 
    198199add_action( 'pre_post_update', 'wp_save_post_revision' ); 
    199200add_action('publish_post', '_publish_post_hook', 5, 1); 
  • wp-includes/default-shortcodes.php

     
     1<?php 
     2 
     3/* 
     4 * Archives shortcode 
     5 * @author bubel & mtdewvirus 
     6 */ 
     7 
     8function archives_shortcode($attr) { 
     9        global $allowedposttags; 
     10        extract(shortcode_atts(array( 
     11                'type' => 'postbypost', 
     12                'limit' => '', 
     13                'format' => 'html', 
     14                'show_post_count' => false, 
     15                'before' => '', 
     16                'after' => '', 
     17                ), $attr)); 
     18 
     19        if ( !in_array($type, array('yearly', 'monthly', 'daily', 'weekly', 'postbypost')) ) 
     20                $type = 'postbypost'; 
     21 
     22        if ( !in_array($format, array('html', 'option', 'custom')) ) 
     23                $format =  'html'; 
     24 
     25        if ( '' != $limit ) 
     26                $limit = (int)$limit; 
     27 
     28        $show_post_count = (bool)$show_post_count; 
     29        $before = wp_kses($before, $allowedposttags); 
     30        $after = wp_kses($after, $allowedposttags); 
     31 
     32        // Get the archives 
     33        $archives = wp_get_archives('type=' . $type . '&limit=' . $limit . '&format=' . $format . '&echo=0&show_post_count=' . $show_post_count . ''); 
     34 
     35        // Check to see if there are any archives 
     36        if ( empty($archives) ) 
     37                $archives = '<p>' . __('Your blog does not currently have any published posts.') . '</p>'; 
     38        elseif ( 'option' == $format ) 
     39                $archives = "<select name='archive-dropdown' onchange='document.location.href=this.options[this.selectedIndex].value;'><option value='" . get_permalink() . "'>--</option>" . $archives . "</select>"; 
     40 
     41        return $archives; 
     42} 
     43 
     44/* Flickr Short Code 
     45Author: kellan 
     46License: BSD/GPL/public domain (take your pick) 
     47 
     48[flickr video=http://flickr.com/photos/revdancatt/2345938910/] 
     49[flickr video=2345938910] 
     50[flickr video=2345938910 show_info=true w=400 h=300] 
     51[flickr video=2345938910 show_info=true w=400 h=300 secret=846d9c1be9] 
     52 
     53and eventually 
     54 
     55[flickr photo=107274692] 
     56[flickr photo=107274692 size=m]  
     57*/ 
     58 
     59function flickr_shortcode_handler($atts) { 
     60        $atts = shortcode_atts(array( 
     61                'video' => 0, 
     62                'photo' => 0, 
     63                'show_info' => 0, 
     64                'w' => 400, 
     65                'h' => 300, 
     66                'secret' => 0, 
     67                'size' => 0 
     68        ), $atts); 
     69 
     70        if ($atts['video']) { 
     71                $showing = 'video'; 
     72                $src = $atts['video'];   
     73        } 
     74        elseif ($atts['photo']) { 
     75                $showing = 'photo'; 
     76                $src = $atts['photo']; 
     77        } 
     78        else { 
     79                return ''; 
     80        } 
     81 
     82        if (preg_match("!photos/(([0-9a-zA-Z-_]+)|([0-9]+@N[0-9]+))/([0-9]+)/?$!", $src, $m)) { 
     83                $atts['photo_id'] = $m[4]; 
     84        } 
     85        else { 
     86                $atts['photo_id'] = $atts['video']; 
     87        } 
     88 
     89        if ($showing == 'video') { 
     90                if (!$atts['show_info'] or in_array($atts['show_info'], array('yes', 'true'))) { 
     91                        $atts['show_info'] = 'true'; 
     92                } 
     93                elseif (in_array($atts['show_info'], array('false', 'no'))) { 
     94                        $atts['show_info'] = 'false'; 
     95                } 
     96 
     97                return flickr_shortcode_video_markup($atts); 
     98        } 
     99        else { 
     100                return ''; 
     101        } 
     102} 
     103 
     104function flickr_shortcode_video_markup($atts) { 
     105        $photo_vars = "photo_id=$atts[photo_id]";        
     106        if ($atts['secret']) { 
     107                $photo_vars .= "&amp;photo_secret=$atts[secret]"; 
     108        } 
     109 
     110        $markup = <<<EOD 
     111<object type="application/x-shockwave-flash" width="$atts[w]" height="$atts[h]" data="http://www.flickr.com/apps/video/stewart.swf?v=1.161" 
     112classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"> <param name="flashvars" value="$photo_vars&amp;flickr_show_info_box=$atts[show_info]"></param> 
     113<param name="movie" value="http://www.flickr.com/apps/video/stewart.swf?v=1.161"></param><param name="bgcolor" value="#000000"></param><param name="allowFullScreen" value="true"></param><embed type="application/x-shockwave-flash" src="http://www.flickr.com/apps/video/stewart.swf?v=1.161" bgcolor="#000000" allowfullscreen="true" 
     114flashvars="$photo_vars&amp;flickr_show_info_box=$atts[show_info]" height="$atts[h]" width="$atts[w]"></embed></object> 
     115EOD; 
     116        return $markup; 
     117} 
     118 
     119/* 
     120 polldaddy.com 
     121 [polldaddy poll="139742"] 
     122 */ 
     123 
     124function polldaddy_shortcode_handler_set_data() { 
     125        $resource = wp_remote_get( 'http://polldaddy.com/xml/keywords.xml' ); 
     126        $body = wp_remote_retrieve_body( $resource ); 
     127        $keywords_xml = simplexml_load_string ( $body ); 
     128        $keywords = array(); 
     129        $keywords['generated'] = time(); 
     130                                                                 
     131        foreach ( $keywords_xml->keyword as $keyword_xml ){ 
     132                $keywords[] = array( 'keyword' => (string) $keyword_xml, 'url' => (string) $keyword_xml['url'] ); 
     133        } 
     134        wp_cache_set( 'pd-keywords', $keywords, 'site-options', 864000 ); 
     135                                 
     136        return $keywords; 
     137} 
     138 
     139function polldaddy_add_rating_js() { 
     140        wp_print_scripts( 'polldaddy-rating-js' ); 
     141} 
     142 
     143function polldaddy_shortcode_handler( $atts, $content = null ) { 
     144        global $post; 
     145 
     146        extract( shortcode_atts( array( 'poll' => 'empty', 'rating' => 'empty', 'unique_id' => null, 'title' => null, 'permalink' => null, ), $atts ) ); 
     147        $poll = (int) $poll; 
     148        $rating = (int) $rating; 
     149 
     150        if ( $rating > 0 )      { 
     151                if ( $unique_id != null ) { 
     152                        $unique_id = wp_specialchars( $unique_id ); 
     153                } else { 
     154                        if ( is_page() ) { 
     155                                $unique_id = 'wp-page-' . $post->ID; 
     156                        } 
     157                        else { 
     158                                $unique_id = 'wp-post-' . $post->ID; 
     159                        } 
     160                } 
     161 
     162                if ( $title != null ) { 
     163                        $title = wp_specialchars( $title ); 
     164                } else { 
     165                        $title = urlencode( $post->post_title ); 
     166                } 
     167                 
     168                if ( $permalink != null  ) { 
     169                        $permalink = clean_url( $permalink ); 
     170                } else { 
     171                        $permalink = urlencode( get_permalink( $post->ID ) ); 
     172                } 
     173                 
     174                wp_register_script( 'polldaddy-rating-js', 'http://i.polldaddy.com/ratings/rating.js' ); 
     175                add_filter( 'wp_footer', 'polldaddy_add_rating_js' ); 
     176                 
     177                return '<div id="pd_rating_holder_' . $rating . '"></div> 
     178<script language="javascript"> 
     179        PDRTJS_settings_' . $rating . ' = { 
     180                "id" : "' . $rating . '", 
     181                "unique_id" : "' . $unique_id . '", 
     182                "title" : "' . $title . '", 
     183                "permalink" : "' . $permalink . '" 
     184        }; 
     185</script>'; 
     186        } else if ( $poll > 0 ) { 
     187                $keywords = wp_cache_get( 'pd-keywords', 'site-options' ); 
     188                if ( !$keywords || $keywords['generated'] <= ( time() - 300 ) ) { 
     189                 
     190                        if ( !wp_cache_get( 'pd-keywords-fetching', 'site-options' ) ) { 
     191                                wp_cache_set( 'pd-keywords-fetching', 1, 'site-options', 30 ); 
     192                                $keywords = polldaddy_shortcode_handler_set_data(); 
     193                        } 
     194                } 
     195 
     196                if ( !$keywords ) { 
     197                        $keywords = array(); 
     198                } 
     199         
     200                $mod = ( $poll % ( count( $keywords ) - 1 ) ); 
     201 
     202                return '<script type="text/javascript" language="javascript" charset="utf-8" src="http://static.polldaddy.com/p/' . $poll . '.js"></script> 
     203                <noscript> 
     204                <a href="http://answers.polldaddy.com/poll/' . $poll . '/">View This Poll</a><br/><span style="font-size:10px;"><a href="' . $keywords[ $mod ][ 'url' ] . '">' . $keywords[ $mod ][ 'keyword' ] . '</a></span> 
     205                </noscript>'; 
     206        } 
     207} 
     208 
     209/* 
     210 * url can be:   
     211 *    http://www.youtube.com/watch?v=H2Ncxw1xfck  
     212 * or http://www.youtube.com/watch?v=H2Ncxw1xfck&w=320&h=240&fmt=1&rel=0&showsearch=1&hd=0 
     213 */ 
     214 
     215function youtube_shortcode_handler( $atts, $content = null ) { 
     216        if ( !empty($atts) && !isset($atts['url']) && isset($atts[0]) ) 
     217                $atts['url'] = $atts[0]; 
     218 
     219        $atts = shortcode_atts( array('url' => ''), $atts ); 
     220 
     221        if ( ! $atts['url'] ) 
     222                return ''; 
     223 
     224        return youtube_id($atts['url']); 
     225} 
     226 
     227function youtube_id( $url ) { 
     228        $url = trim( $url, ' "' ); 
     229        $url = trim( $url ); 
     230        $url = str_replace( '/v/', '/?v=', $url ); // new format - http://www.youtube.com/v/jF-kELmmvgA 
     231        $url = str_replace( '&amp;', '&', $url ); 
     232        $url = parse_url($url); 
     233 
     234        if ( !isset($url['query']) ) 
     235                return '<!--YouTube Error: bad URL entered-->'; 
     236 
     237        parse_str($url['query'], $qargs); 
     238 
     239        if ( !isset($qargs['v']) ) 
     240                return '<!--YouTube Error: bad URL entered-->'; 
     241 
     242        $id = preg_replace('|[^_a-z0-9-]|i', '', $qargs['v']); 
     243 
     244        if ( is_feed() ) 
     245                return '<span style="text-align:center; display: block;"><a href="' . get_permalink() . '"><img src="http://img.youtube.com/vi/' . $id . '/2.jpg" alt="" /></a></span>'; 
     246 
     247        // calculate the width and height, taken content_width into consideration 
     248        global $content_width; 
     249 
     250        $input_w = (isset($qargs['w']) && intval($qargs['w'])) ? intval($qargs['w']) : 0;  
     251        $input_h = (isset($qargs['h']) && intval($qargs['h'])) ? intval($qargs['h']) : 0;  
     252 
     253        if ( $input_w > 0 && $input_h > 0 ){ 
     254                $w = $input_w;  
     255                $h = $input_h;  
     256        } else if ( $input_w == 0 && $input_h == 0 ){ 
     257 
     258                if ( isset($qargs['fmt']) && intval($qargs['fmt']) )  
     259                        $w = ( !empty($content_width) ? min( $content_width, 480) : 480 ); 
     260                else  
     261                        $w = ( !empty($content_width) ? min( $content_width, 425) : 425 ); 
     262 
     263                $h = ceil($w * 14 / 17); 
     264 
     265        } else if ( $input_w > 0 ) { 
     266 
     267                $w = $input_w; 
     268                $h = ceil($w * 14 / 17); 
     269 
     270        } else { //input_h > 0 
     271 
     272                if ( isset($qargs['fmt']) && intval($qargs['fmt']) )  
     273                        $w = ( !empty($content_width) ? min( $content_width, 480) : 480 ); 
     274                else  
     275                        $w = ( !empty($content_width) ? min( $content_width, 425) : 425 ); 
     276 
     277                $h = $input_h;  
     278        } 
     279 
     280        $fmt = ''; 
     281        if ( isset($qargs['fmt']) && intval($qargs['fmt']) ) 
     282                $fmt = "&fmt={$qargs['fmt']}"; 
     283 
     284        if ( isset($qargs['rel']) && 0 == $qargs['rel']) { 
     285                $rel = 0; 
     286        } else { 
     287                $rel = 1; 
     288        } 
     289 
     290        if ( isset($qargs['showsearch']) && 1 == $qargs['showsearch']) { 
     291                $search = 1; 
     292        } else { 
     293                $search = 0; 
     294        } 
     295 
     296        if ( isset($qargs['hd']) && 1 == $qargs['hd']) { 
     297                $hd = 1; 
     298        } else { 
     299                $hd = 0; 
     300        } 
     301 
     302        $video = "<span style='text-align:center; display: block;'><object width='$w' height='$h'><param name='movie' value='http://www.youtube.com/v/$id&rel=$rel&fs=1$fmt&showsearch=$search&hd=$hd' /> <param name='allowfullscreen' value='true' /> <param name='wmode' value='transparent' /> <embed src='http://www.youtube.com/v/$id&rel=$rel&fs=1$fmt&showsearch=$search&hd=$hd' type='application/x-shockwave-flash' allowfullscreen='true' width='$w' height='$h' wmode='transparent'></embed> </object></span>"; 
     303 
     304        return $video; 
     305} 
     306 
     307function default_shortcode_init() { 
     308        add_shortcode('archives', 'archives_shortcode'); 
     309        add_shortcode('flickr', 'flickr_shortcode_handler'); 
     310        add_shortcode('polldaddy', 'polldaddy_shortcode_handler'); 
     311        add_shortcode('youtube', 'youtube_shortcode_handler'); 
     312} 
     313 No newline at end of file 
  • wp-includes/functions.php

    Property changes on: wp-includes/default-shortcodes.php
    ___________________________________________________________________
    Name: svn:eol-style
       + native
    
     
    27552755} 
    27562756 
    27572757/** 
     2758 * Determines if default shortcodes should be loaded. 
     2759 * 
     2760 * @since 2.9.0 
     2761 * @uses add_action() 
     2762 */ 
     2763function wp_maybe_load_shortcodes() { 
     2764        if ( ! apply_filters('load_default_shortcodes', true) ) 
     2765                return; 
     2766        require_once( ABSPATH . WPINC . '/default-shortcodes.php' ); 
     2767        add_action('init', 'default_shortcode_init'); 
     2768} 
     2769 
     2770/** 
    27582771 * Flush all output buffers for PHP 5.2. 
    27592772 * 
    27602773 * Make sure all output buffers are flushed before our singletons our destroyed.