WordPress.org

Make WordPress Core

Ticket #4736: tags-patch.diff

File tags-patch.diff, 17.7 KB (added by bloertscher, 11 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();