WordPress.org

Make WordPress Core

Ticket #4736: tags-patch.diff

File tags-patch.diff, 17.7 KB (added by bloertscher, 8 years ago)

This patch adds all of the functions that are currently in the plugin. It is a good start as there are probably other functions that should also be created.

  • wp-includes/category-template.php

     
    458458        echo get_the_tag_list($before, $sep, $after); 
    459459} 
    460460 
     461function get_the_tag_by_ID($tag_ID) { 
     462        $tag_ID = (int) $tag_ID; 
     463        $tag = &get_tag($tag_ID); 
     464        return $tag->name; 
     465} 
     466 
     467function walk_tag_tree() { 
     468        $walker = new Walker_Tag; 
     469        $args = func_get_args(); 
     470        return call_user_func_array(array(&$walker, 'walk'), $args); 
     471} 
     472 
     473function walk_tag_dropdown_tree() { 
     474        $walker = new Walker_TagDropdown; 
     475        $args = func_get_args(); 
     476        return call_user_func_array(array(&$walker, 'walk'), $args); 
     477} 
     478 
     479function wp_list_tags($args = '') { 
     480        $defaults = array( 
     481                'show_option_all' => '', 'orderby' => 'name',  
     482                'order' => 'ASC', 'show_last_update' => 0,  
     483                'style' => 'list', 'show_count' => 0,  
     484                'hide_empty' => 1, 'use_desc_for_title' => 1,  
     485                'child_of' => 0, 'feed' => '',  
     486                'feed_image' => '', 'exclude' => '',  
     487                'hierarchical' => true, 'title_li' => __('Categories') 
     488        ); 
     489         
     490        $r = wp_parse_args( $args, $defaults ); 
     491         
     492        if ( !isset( $r['pad_counts'] ) && $r['show_count'] && $r['hierarchical'] ) { 
     493                $r['pad_counts'] = true; 
     494        } 
     495         
     496        if ( isset( $r['show_date'] ) ) { 
     497                $r['include_last_update_time'] = $r['show_date']; 
     498        } 
     499         
     500        extract( $r ); 
     501         
     502        $tags = get_tags($r); 
     503 
     504        $output = ''; 
     505        if ( $title_li && 'list' == $style ) 
     506                        $output = '<li class="tags">' . $r['title_li'] . '<ul>'; 
     507 
     508        if ( empty($tags) ) { 
     509                if ( 'list' == $style ) 
     510                        $output .= '<li>' . __("No tags") . '</li>'; 
     511                else 
     512                        $output .= __("No tags"); 
     513        } else { 
     514                global $wp_query; 
     515                 
     516                if( !empty($show_option_all) ) 
     517                        if ('list' == $style )   
     518                                $output .= '<li><a href="' .  get_bloginfo('url')  . '">' . $show_option_all . '</a></li>'; 
     519                        else 
     520                                $output .= '<a href="' .  get_bloginfo('url')  . '">' . $show_option_all . '</a>'; 
     521                 
     522                if ( is_tag() ) 
     523                        $r['current_tag'] = $wp_query->get_queried_object_id(); 
     524 
     525                if ( $hierarchical ) 
     526                        $depth = 0;  // Walk the full depth. 
     527                else 
     528                        $depth = -1; // Flat. 
     529 
     530                $output .= walk_tag_tree($tags, $depth, $r); 
     531        } 
     532 
     533        if ( $title_li && 'list' == $style ) 
     534                $output .= '</ul></li>'; 
     535 
     536        echo apply_filters('btl_list_tags', $output); 
     537} 
     538 
     539function btl_dropdown_tags($args = '') { 
     540        $defaults = array( 
     541                'show_option_all' => '', 'show_option_none' => '',  
     542                'orderby' => 'ID', 'order' => 'ASC',  
     543                'show_last_update' => 0, 'show_count' => 0,  
     544                'hide_empty' => 1, 'child_of' => 0,  
     545                'exclude' => '', 'echo' => 1,  
     546                'selected' => 0, 'hierarchical' => 0,  
     547                'name' => 'tag', 'class' => 'postform' 
     548        ); 
     549         
     550        $defaults['selected'] = ( is_tag() ) ? get_query_var('tag') : 0; 
     551         
     552        $r = wp_parse_args( $args, $defaults ); 
     553        $r['include_last_update_time'] = $r['show_last_update']; 
     554        extract( $r ); 
     555 
     556        $tags = get_tags($r); 
     557 
     558        $output = ''; 
     559        if ( ! empty($tags) ) { 
     560                $output = "<select name='$name' id='$name' class='$class'>\n"; 
     561 
     562                if ( $show_option_all ) { 
     563                        $show_option_all = apply_filters('list_tags', $show_option_all); 
     564                        $output .= "\t<option value='0'>$show_option_all</option>\n"; 
     565                } 
     566 
     567                if ( $show_option_none) { 
     568                        $show_option_none = apply_filters('list_tags', $show_option_none); 
     569                        $output .= "\t<option value='-1'>$show_option_none</option>\n"; 
     570                } 
     571 
     572                if ( $hierarchical ) 
     573                        $depth = 0;  // Walk the full depth. 
     574                else 
     575                        $depth = -1; // Flat. 
     576 
     577                $output .= walk_tag_dropdown_tree($tags, $depth, $r); 
     578                $output .= "</select>\n"; 
     579        } 
     580 
     581        $output = apply_filters('btl_dropdown_tags', $output); 
     582 
     583        if ( $echo ) 
     584                echo $output; 
     585 
     586        return $output; 
     587} 
     588 
     589function wp_dropdown_tags($args = '') { 
     590        $defaults = array( 
     591                'show_option_all' => '', 'show_option_none' => '',  
     592                'orderby' => 'ID', 'order' => 'ASC',  
     593                'show_last_update' => 0, 'show_count' => 0,  
     594                'hide_empty' => 1, 'child_of' => 0,  
     595                'exclude' => '', 'echo' => 1,  
     596                'selected' => 0, 'hierarchical' => 0,  
     597                'name' => 'tag', 'class' => 'postform' 
     598        ); 
     599         
     600        $defaults['selected'] = ( is_tag() ) ? get_query_var('tag') : 0; 
     601         
     602        $r = wp_parse_args( $args, $defaults ); 
     603        $r['include_last_update_time'] = $r['show_last_update']; 
     604        extract( $r ); 
     605 
     606        $tags = get_tags($r); 
     607 
     608        $output = ''; 
     609        if ( ! empty($tags) ) { 
     610                $output = "<select name='$name' id='$name' class='$class'>\n"; 
     611 
     612                if ( $show_option_all ) { 
     613                        $show_option_all = apply_filters('list_tags', $show_option_all); 
     614                        $output .= "\t<option value='0'>$show_option_all</option>\n"; 
     615                } 
     616 
     617                if ( $show_option_none) { 
     618                        $show_option_none = apply_filters('list_tags', $show_option_none); 
     619                        $output .= "\t<option value='-1'>$show_option_none</option>\n"; 
     620                } 
     621 
     622                if ( $hierarchical ) 
     623                        $depth = 0;  // Walk the full depth. 
     624                else 
     625                        $depth = -1; // Flat. 
     626 
     627                $output .= walk_tag_dropdown_tree($tags, $depth, $r); 
     628                $output .= "</select>\n"; 
     629        } 
     630 
     631        $output = apply_filters('btl_dropdown_tags', $output); 
     632 
     633        if ( $echo ) 
     634                echo $output; 
     635 
     636        return $output; 
     637} 
     638 
     639 
    461640?> 
  • wp-includes/category.php

     
    140140        return $tags; 
    141141} 
    142142 
     143function &get_tag(&$tag, $output = OBJECT) { 
     144        return get_term($tag, 'post_tag', $output); 
     145} 
     146 
    143147// 
    144148// Cache 
    145149// 
  • wp-includes/classes.php

     
    681681        } 
    682682} 
    683683 
     684class Walker_Tag extends Walker { 
     685        var $tree_type = 'tag'; 
     686        var $db_fields = array ('parent' => 'parent', 'id' => 'term_id'); //TODO: decouple this 
     687 
     688        function start_lvl($output, $depth, $args) { 
     689                if ( 'list' != $args['style'] ) 
     690                        return $output; 
     691 
     692                $indent = str_repeat("\t", $depth); 
     693                $output .= "$indent<ul class='children'>\n"; 
     694                return $output; 
     695        } 
     696 
     697        function end_lvl($output, $depth, $args) { 
     698                if ( 'list' != $args['style'] ) 
     699                        return $output; 
     700 
     701                $indent = str_repeat("\t", $depth); 
     702                $output .= "$indent</ul>\n"; 
     703                return $output; 
     704        } 
     705 
     706        function start_el($output, $tag, $depth, $args) { 
     707                extract($args); 
     708 
     709                $tag_name = attribute_escape( $tag->name); 
     710                $tag_name = apply_filters( 'list_tags', $tag_name, $tag ); 
     711                $link = '<a href="' . get_tag_link( $tag->term_id ) . '" '; 
     712                if ( $use_desc_for_title == 0 || empty($tag->description) ) 
     713                        $link .= 'title="' . sprintf(__( 'View all posts filed under %s' ), $tag_name) . '"'; 
     714                else 
     715                        $link .= 'title="' . attribute_escape( apply_filters( 'tag_description', $tag->description, $tag )) . '"'; 
     716                $link .= '>'; 
     717                $link .= $tag_name . '</a>'; 
     718 
     719                if ( (! empty($feed_image)) || (! empty($feed)) ) { 
     720                        $link .= ' '; 
     721 
     722                        if ( empty($feed_image) ) 
     723                                $link .= '('; 
     724 
     725                        $link .= '<a href="' . get_tag_rss_link( 0, $tag->term_id, $tag->slug ) . '"'; 
     726 
     727                        if ( empty($feed) ) 
     728                                $alt = ' alt="' . sprintf(__( 'Feed for all posts filed under %s' ), $tag_name ) . '"'; 
     729                        else { 
     730                                $title = ' title="' . $feed . '"'; 
     731                                $alt = ' alt="' . $feed . '"'; 
     732                                $name = $feed; 
     733                                $link .= $title; 
     734                        } 
     735 
     736                        $link .= '>'; 
     737 
     738                        if ( empty($feed_image) ) 
     739                                $link .= $name; 
     740                        else 
     741                                $link .= "<img src='$feed_image'$alt$title" . ' />'; 
     742                        $link .= '</a>'; 
     743                        if ( empty($feed_image) ) 
     744                                $link .= ')'; 
     745                } 
     746 
     747                if ( isset($show_count) && $show_count ) 
     748                        $link .= ' (' . intval($tag->count) . ')'; 
     749 
     750                if ( isset($show_date) && $show_date ) { 
     751                        $link .= ' ' . gmdate('Y-m-d', $tag->last_update_timestamp); 
     752                } 
     753 
     754                if ( $current_tag ) 
     755                        $_current_tag = get_tag( $current_tag ); 
     756 
     757                if ( 'list' == $args['style'] ) { 
     758                        $output .= "\t<li"; 
     759                        if ( $current_tag && ($tag->term_id == $current_tag) ) 
     760                                $output .=  ' class="current-tag"'; 
     761                        elseif ( $_current_tag && ($tag->term_id == $_current_tag->parent) ) 
     762                                $output .=  ' class="current-tag-parent"'; 
     763                        $output .= ">$link\n"; 
     764                } else { 
     765                        $output .= "\t$link<br />\n"; 
     766                } 
     767 
     768                return $output; 
     769        } 
     770 
     771        function end_el($output, $page, $depth, $args) { 
     772                if ( 'list' != $args['style'] ) 
     773                        return $output; 
     774 
     775                $output .= "</li>\n"; 
     776                return $output; 
     777        } 
     778 
     779} 
     780 
     781class Walker_TagDropdown extends Walker { 
     782        var $tree_type = 'tag'; 
     783        var $db_fields = array ('parent' => 'parent', 'id' => 'term_id'); //TODO: decouple this 
     784 
     785        function start_el($output, $tag, $depth, $args) { 
     786                $pad = str_repeat('&nbsp;', $depth * 3); 
     787 
     788                $tag_name = apply_filters('list_tags', $tag->name, $tag); 
     789                $output .= "\t<option value=\"".$tag->term_id."\""; 
     790                if ( $tag->term_id == $args['selected'] ) 
     791                        $output .= ' selected="selected"'; 
     792                $output .= '>'; 
     793                $output .= $pad.$tag_name; 
     794                if ( $args['show_count'] ) 
     795                        $output .= '&nbsp;&nbsp;('. $tag->count .')'; 
     796                if ( $args['show_last_update'] ) { 
     797                        $format = 'Y-m-d'; 
     798                        $output .= '&nbsp;&nbsp;' . gmdate($format, $tag->last_update_timestamp); 
     799                } 
     800                $output .= "</option>\n"; 
     801 
     802                return $output; 
     803        } 
     804} 
     805 
    684806class WP_Ajax_Response { 
    685807        var $responses = array(); 
    686808 
  • wp-includes/feed.php

     
    166166        echo get_the_category_rss($type); 
    167167} 
    168168 
     169function get_tag_rss_link($echo = false, $tag_ID, $tag_nicename) { 
     170        $permalink_structure = get_option('permalink_structure'); 
     171 
     172        if ( '' == $permalink_structure ) { 
     173                $link = get_option('home') . '?feed=rss2&amp;tag=' . $tag_ID; 
     174        } else { 
     175                $link = get_tag_link($tag_ID); 
     176                $link = $link . user_trailingslashit('feed', 'feed'); 
     177        } 
     178 
     179        $link = apply_filters('tag_feed_link', $link); 
     180 
     181        if ( $echo ) 
     182                echo $link; 
     183        return $link; 
     184} 
     185 
    169186function html_type_rss() { 
    170187        $type = get_bloginfo('html_type'); 
    171188        if (strpos($type, 'xhtml') !== false) 
     
    206223        } 
    207224} 
    208225 
    209 ?> 
    210  No newline at end of file 
     226?> 
  • wp-includes/general-template.php

     
    276276        } 
    277277} 
    278278 
     279function single_tag_title($prefix = '', $display = true ) { 
     280        $tag = intval( get_query_var('tag_id') ); 
     281        if ( !empty($tag) && !(strtoupper($tag) == 'ALL') ) { 
     282                $my_tag_name = apply_filters('single_tag_title', get_the_tag_by_ID($tag)); 
     283                if ( !empty($my_tag_name) ) { 
     284                        if ( $display ) 
     285                                echo $prefix.strip_tags($my_tag_name); 
     286                        else 
     287                                return strip_tags($my_tag_name); 
     288                } 
     289        } 
     290} 
    279291 
    280292function single_month_title($prefix = '', $display = true ) { 
    281293        global $wp_locale; 
  • wp-includes/widgets.php

     
    801801        add_action( 'sidebar_admin_page', 'wp_widget_categories_page' ); 
    802802} 
    803803 
     804function wp_widget_tags($args, $number = 1) { 
     805        extract($args); 
     806        $options = get_option('widget_tags'); 
     807         
     808        $c = $options[$number]['count'] ? '1' : '0'; 
     809        $h = $options[$number]['hierarchical'] ? '1' : '0'; 
     810        $d = $options[$number]['dropdown'] ? '1' : '0'; 
     811         
     812        $title = empty($options[$number]['title']) ? __('Categories') : $options[$number]['title']; 
     813 
     814        echo $before_widget; 
     815        echo $before_title . $title . $after_title;  
     816 
     817        $tag_args = "orderby=name&show_count={$c}&hierarchical={$h}"; 
     818 
     819        if ( $d ) { 
     820                wp_dropdown_tags($tag_args . '&show_option_none= ' . __('Select Category')); 
     821?> 
     822 
     823<script lang='javascript'><!-- 
     824    var dropdown = document.getElementById("tag"); 
     825    function onCatChange() { 
     826                if ( dropdown.options[dropdown.selectedIndex].value > 0 ) { 
     827                        location.href = "<?php echo get_option('home'); ?>/?tag="+dropdown.options[dropdown.selectedIndex].value; 
     828                } 
     829    } 
     830    dropdown.onchange = onCatChange; 
     831--></script> 
     832 
     833<?php 
     834        } else { 
     835?> 
     836                <ul> 
     837                <?php wp_list_tags($tag_args . '&title_li='); ?> 
     838                </ul> 
     839<?php 
     840        } 
     841 
     842        echo $after_widget; 
     843} 
     844 
     845function wp_widget_tags_control( $number ) { 
     846        $options = $newoptions = get_option('widget_tags'); 
     847         
     848        if ( !is_array( $options ) ) { 
     849                $options = $newoptions = get_option( 'widget_tags' ); 
     850        } 
     851         
     852        if ( $_POST['tags-submit-' . $number] ) { 
     853                $newoptions[$number]['count'] = isset($_POST['tags-count-' . $number]); 
     854                $newoptions[$number]['hierarchical'] = isset($_POST['tags-hierarchical-' . $number]); 
     855                $newoptions[$number]['dropdown'] = isset($_POST['tags-dropdown-' . $number]); 
     856                $newoptions[$number]['title'] = strip_tags(stripslashes($_POST['tags-title-' . $number])); 
     857        } 
     858         
     859        if ( $options != $newoptions ) { 
     860                $options = $newoptions; 
     861                update_option('widget_tags', $options); 
     862        } 
     863         
     864        $title = attribute_escape( $options[$number]['title'] ); 
     865?> 
     866                        <p><label for="tage-title-<?php echo $number; ?>"> 
     867                                <?php _e( 'Title:' ); ?> <input style="width:300px" id="tags-title-<?php echo $number; ?>" name="tags-title-<?php echo $number; ?>" type="text" value="<?php echo $title; ?>" /> 
     868                        </label></p> 
     869                         
     870                        <p><label for="tags-dropdown-<?php echo $number; ?>"> 
     871                                <input type="checkbox" class="checkbox" id="tags-dropdown-<?php echo $number; ?>" name="tags-dropdown-<?php echo $number; ?>"<?php echo $options[$number]['dropdown'] ? ' checked="checked"' : ''; ?> /> <?php _e( 'Show as dropdown' ); ?> 
     872                        </label></p> 
     873                         
     874                        <p><label for="tags-count-<?php echo $number; ?>"> 
     875                                <input type="checkbox" class="checkbox" id="tags-count-<?php echo $number; ?>" name="tags-count-<?php echo $number; ?>"<?php echo $options[$number]['count'] ? ' checked="checked"' : ''; ?> /> <?php _e( 'Show post counts' ); ?> 
     876                        </label></p> 
     877                         
     878                        <p><label for="tags-hierarchical-<?php echo $number; ?>"> 
     879                                <input type="checkbox" class="checkbox" id="tags-hierarchical-<?php echo $number; ?>" name="tags-hierarchical-<?php echo $number; ?>"<?php echo $options[$number]['hierarchical'] ? ' checked="checked"' : ''; ?> /> <?php _e( 'Show hierarchy' ); ?> 
     880                        </label></p> 
     881                         
     882                        <input type="hidden" id="tags-submit-<?php echo $number; ?>" name="tags-submit-<?php echo $number; ?>" value="1" /> 
     883<?php 
     884} 
     885 
     886function wp_widget_tags_setup() { 
     887        $options = $newoptions = get_option( 'widget_tags' ); 
     888         
     889        if ( isset( $_POST['tags-number-submit'] ) ) { 
     890                $number = (int) $_POST['tags-number']; 
     891                 
     892                if ( $number > 9 ) { 
     893                        $number = 9; 
     894                } elseif ( $number < 1 ) { 
     895                        $number = 1; 
     896                } 
     897                 
     898                $newoptions['number'] = $number; 
     899        } 
     900         
     901        if ( $newoptions != $options ) { 
     902                $options = $newoptions; 
     903                update_option( 'widget_tags', $options ); 
     904                wp_widget_tags_register( $options['number'] ); 
     905        } 
     906} 
     907 
     908function wp_widget_tags_page() { 
     909        $options = get_option( 'widget_tags' ); 
     910?> 
     911        <div class="wrap"> 
     912                <form method="post"> 
     913                        <h2><?php _e( 'Categories Widgets' ); ?></h2> 
     914                        <p style="line-height: 30px;"><?php _e( 'How many tags widgets would you like?' ); ?> 
     915                                <select id="tags-number" name="tags-number" value="<?php echo attribute_escape( $options['number'] ); ?>"> 
     916                                        <?php 
     917                                                for ( $i = 1; $i < 10; $i++ ) { 
     918                                                        echo '<option value="' . $i . '"' . ( $i == $options['number'] ? ' selected="selected"' : '' ) . '>' . $i . "</option>\n"; 
     919                                                } 
     920                                        ?> 
     921                                </select> 
     922                                <span class="submit"> 
     923                                        <input type="submit" value="<?php echo attribute_escape( __( 'Save' ) ); ?>" id="tags-number-submit" name="tags-number-submit" /> 
     924                                </span> 
     925                        </p> 
     926                </form> 
     927        </div> 
     928<?php 
     929} 
     930 
     931function wp_widget_tags_upgrade() { 
     932        $options = get_option( 'widget_tags' ); 
     933 
     934        $newoptions = array( 'number' => 1, 1 => $options ); 
     935 
     936        update_option( 'widget_tags', $newoptions ); 
     937 
     938        $sidebars_widgets = get_option( 'sidebars_widgets' ); 
     939        if ( is_array( $sidebars_widgets ) ) { 
     940                foreach ( $sidebars_widgets as $sidebar => $widgets ) { 
     941                        if ( is_array( $widgets ) ) { 
     942                                foreach ( $widgets as $widget ) 
     943                                        $new_widgets[$sidebar][] = ( $widget == 'tags' ) ? 'tags-1' : $widget; 
     944                        } else { 
     945                                $new_widgets[$sidebar] = $widgets; 
     946                        } 
     947                } 
     948                if ( $new_widgets != $sidebars_widgets ) 
     949                        update_option( 'sidebars_widgets', $new_widgets ); 
     950        } 
     951 
     952        if ( isset( $_POST['tags-submit'] ) ) { 
     953                $_POST['tags-submit-1'] = $_POST['tags-submit']; 
     954                $_POST['tags-count-1'] = $_POST['tags-count']; 
     955                $_POST['tags-hierarchical-1'] = $_POST['tags-hierarchical']; 
     956                $_POST['tags-dropdown-1'] = $_POST['tags-dropdown']; 
     957                $_POST['tags-title-1'] = $_POST['tags-title']; 
     958                foreach ( $_POST as $k => $v ) 
     959                        if ( substr($k, -5) == 'order' ) 
     960                                $_POST[$k] = str_replace('tags', 'tags-1', $v); 
     961        } 
     962 
     963        return $newoptions; 
     964} 
     965 
     966function wp_widget_tags_register() { 
     967        $options = get_option( 'widget_tags' ); 
     968        if ( !isset($options['number']) ) 
     969                $options = wp_widget_tags_upgrade(); 
     970        $number = (int) $options['number']; 
     971         
     972        if ( $number > 9 ) { 
     973                $number = 9; 
     974        } elseif ( $number < 1 ) { 
     975                $number = 1; 
     976        } 
     977         
     978        $dims = array( 'width' => 350, 'height' => 170 ); 
     979        $class = array( 'classname' => 'widget_tags' ); 
     980         
     981        for ( $i = 1; $i <= 9; $i++ ) { 
     982                $name = sprintf( __( 'Tags %d' ), $i ); 
     983                $id = 'tags-' . $i; 
     984                 
     985                $widget_callback = ( $i <= $number ) ? 'wp_widget_tags' : ''; 
     986                $control_callback = ( $i <= $number ) ? 'wp_widget_tags_control' : ''; 
     987                 
     988                wp_register_sidebar_widget( $id, $name, $widget_callback, $class, $i ); 
     989                wp_register_widget_control( $id, $name, $control_callback, $dims, $i ); 
     990        } 
     991         
     992        add_action( 'sidebar_admin_setup', 'wp_widget_tags_setup' ); 
     993        add_action( 'sidebar_admin_page', 'wp_widget_tags_page' ); 
     994} 
     995 
    804996function wp_widget_recent_entries($args) { 
    805997        if ( $output = wp_cache_get('widget_recent_entries') ) 
    806998                return print($output); 
     
    11171309        wp_register_sidebar_widget('recent-posts', __('Recent Posts'), 'wp_widget_recent_entries', $class); 
    11181310        wp_register_widget_control('recent-posts', __('Recent Posts'), 'wp_widget_recent_entries_control', $dims90); 
    11191311         
    1120         wp_widget_categories_register(); 
     1312        wp_widget_categories_register(); 
     1313        wp_widget_tags_register(); 
    11211314        wp_widget_text_register(); 
    11221315        wp_widget_rss_register(); 
    11231316        wp_widget_recent_comments_register();