WordPress.org

Make WordPress Core

Ticket #29972: 29972.3.diff

File 29972.3.diff, 5.7 KB (added by dylanj, 6 years ago)

Latest diff

  • .php

    diff --git a/general-template.php b/general-template-new.php
    index 8655cee..e03d742 100644
    old new function language_attributes($doctype = 'html') { 
    25842584 * @param string|array $args Optional. Override defaults.
    25852585 * @return array|string String of page links or array of page links.
    25862586 */
     2587<?php
    25872588function paginate_links( $args = '' ) {
    25882589        global $wp_query, $wp_rewrite;
    25892590
    function paginate_links( $args = '' ) { 
    25952596
    25962597        if ( isset( $url_parts[1] ) ) {
    25972598                wp_parse_str( $url_parts[1], $query_args );
    2598                 $query_args = urlencode_deep( $query_args );
    25992599        }
    26002600
    26012601        $pagenum_link = remove_query_arg( array_keys( $query_args ), $pagenum_link );
    function paginate_links( $args = '' ) { 
    26162616                'end_size' => 1,
    26172617                'mid_size' => 2,
    26182618                'type' => 'plain',
    2619                 'add_args' => $query_args, // array of query args to add
     2619                'add_args' => false, // array of query args to add
    26202620                'add_fragment' => '',
    26212621                'before_page_number' => '',
    2622                 'after_page_number' => ''
     2622                'after_page_number' => '',
     2623                'link_current' => false,
    26232624        );
    26242625
    26252626        $args = wp_parse_args( $args, $defaults );
    function paginate_links( $args = '' ) { 
    26412642        $add_args = is_array( $args['add_args'] ) ? $args['add_args'] : false;
    26422643        $r = '';
    26432644        $page_links = array();
     2645        $page_link_data = array();
    26442646        $dots = false;
     2647        $active = false;
    26452648
    26462649        if ( $args['prev_next'] && $current && 1 < $current ) :
    26472650                $link = str_replace( '%_%', 2 == $current ? '' : $args['format'], $args['base'] );
    function paginate_links( $args = '' ) { 
    26572660                 *
    26582661                 * @param string $link The paginated link URL.
    26592662                 */
    2660                 $page_links[] = '<a class="prev page-numbers" href="' . esc_url( apply_filters( 'paginate_links', $link ) ) . '">' . $args['prev_text'] . '</a>';
     2663                $page_link_data[] = array(
     2664                        'type' => 'prev',
     2665                        'link' => esc_url( apply_filters( 'paginate_links', $link ) ),
     2666                        'text' => $prev_text,
     2667                        'active' => false,
     2668                );
    26612669        endif;
    26622670        for ( $n = 1; $n <= $total; $n++ ) :
    2663                 if ( $n == $current ) :
    2664                         $page_links[] = "<span class='page-numbers current'>" . $args['before_page_number'] . number_format_i18n( $n ) . $args['after_page_number'] . "</span>";
     2671                if ( $args['show_all'] || ( $n <= $end_size || ( $current && $n >= $current - $mid_size && $n <= $current + $mid_size ) || $n > $total - $end_size ) ) :
     2672                        $link = str_replace( '%_%', 1 == $n ? '' : $args['format'], $args['base'] );
     2673                        $link = str_replace( '%#%', $n, $link );
     2674                        if ( $add_args ) {
     2675                                $link = add_query_arg( $add_args, $link );
     2676                        }
     2677                        $link .= $args['add_fragment'];
     2678
     2679                        /** This filter is documented in wp-includes/general-template.php */
     2680                        $page_link_data[] = array(
     2681                                'type' => 'page',
     2682                                'link' => esc_url( apply_filters( 'paginate_links', $link ) ),
     2683                                'text' => number_format_i18n( $n ),
     2684                                'active' => ( $n == $current ),
     2685                        );
    26652686                        $dots = true;
    2666                 else :
    2667                         if ( $args['show_all'] || ( $n <= $end_size || ( $current && $n >= $current - $mid_size && $n <= $current + $mid_size ) || $n > $total - $end_size ) ) :
    2668                                 $link = str_replace( '%_%', 1 == $n ? '' : $args['format'], $args['base'] );
    2669                                 $link = str_replace( '%#%', $n, $link );
    2670                                 if ( $add_args )
    2671                                         $link = add_query_arg( $add_args, $link );
    2672                                 $link .= $args['add_fragment'];
    2673 
    2674                                 /** This filter is documented in wp-includes/general-template.php */
    2675                                 $page_links[] = "<a class='page-numbers' href='" . esc_url( apply_filters( 'paginate_links', $link ) ) . "'>" . $args['before_page_number'] . number_format_i18n( $n ) . $args['after_page_number'] . "</a>";
    2676                                 $dots = true;
    2677                         elseif ( $dots && ! $args['show_all'] ) :
    2678                                 $page_links[] = '<span class="page-numbers dots">' . __( '&hellip;' ) . '</span>';
    2679                                 $dots = false;
    2680                         endif;
     2687                elseif ( $dots && !$args['show_all'] ) :
     2688                        $page_link_data[] = array(
     2689                                'type' => 'dots',
     2690                                'link' => null,
     2691                                'text' => __( '&hellip;' ),
     2692                                'active' => false,
     2693                        );
     2694                        $dots = false;
    26812695                endif;
    26822696        endfor;
    26832697        if ( $args['prev_next'] && $current && ( $current < $total || -1 == $total ) ) :
    function paginate_links( $args = '' ) { 
    26882702                $link .= $args['add_fragment'];
    26892703
    26902704                /** This filter is documented in wp-includes/general-template.php */
    2691                 $page_links[] = '<a class="next page-numbers" href="' . esc_url( apply_filters( 'paginate_links', $link ) ) . '">' . $args['next_text'] . '</a>';
     2705                $page_link_data[] = array(
     2706                        'type' => 'next',
     2707                        'link' => esc_url( apply_filters( 'paginate_links', $link ) ),
     2708                        'text' => $next_text,
     2709                        'active' => false,
     2710                );
     2711        endif;
     2712        // If we just want the data without the HTML, then we don't need to
     2713        // process the HTML here.
     2714        if ( $args['type'] != 'array_raw' ) :
     2715                foreach ( $page_link_data as $page_link ) :
     2716                        switch( $page_link['type'] ) {
     2717                                case 'prev':
     2718                                        $page_links[] = '<a class="prev page-numbers" href="' . $page_link['text'] . '">' . $prev_text . '</a>';
     2719                                        break;
     2720                                case 'next':
     2721                                        $page_links[] = '<a class="next page-numbers" href="' . $page_link['text'] . '">' . $next_text . '</a>';
     2722                                        break;
     2723                                case 'dots':
     2724                                        $page_links[] = '<span class="page-numbers dots">' . $page_link['text'] . '</span>';
     2725                                        break;
     2726                                case 'page':
     2727                                        if ( ! $args['link_current'] && $page_link['active'] ) {
     2728                                                $page_links[] = "<span class='page-numbers current'>" . $args['before_page_number'] . $page_link['text'] . $args['after_page_number'] . "</span>";
     2729                                        } else {
     2730                                                $page_links[] = "<a class='" . ($page_link['active'] ? 'current ' : null) . "page-numbers' href='" . $page_link['link'] . "'>" . $args['before_page_number'] . $page_link['text'] . $args['after_page_number'] . "</a>";
     2731                                        }
     2732                                        break;
     2733                        }
     2734                endforeach;
    26922735        endif;
    26932736        switch ( $args['type'] ) {
     2737                case 'array_raw' :
     2738                        return $page_link_data;
     2739
    26942740                case 'array' :
    26952741                        return $page_links;
    26962742