WordPress.org

Make WordPress Core

Ticket #29972: 29972.diff

File 29972.diff, 4.8 KB (added by dylanj, 7 years ago)
  • .php

    old new  
    3333                'add_args' => false, // array of query args to add
    3434                'add_fragment' => '',
    3535                'before_page_number' => '',
    36                 'after_page_number' => ''
     36                'after_page_number' => '',
     37                'link_current' => false,
    3738        );
    3839
    3940        $args = wp_parse_args( $args, $defaults );
     
    5556        $add_args = is_array( $args['add_args'] ) ? $args['add_args'] : false;
    5657        $r = '';
    5758        $page_links = array();
     59        $page_link_data = array();
    5860        $dots = false;
     61        $active = false;
    5962
    6063        if ( $args['prev_next'] && $current && 1 < $current ) :
    6164                $link = str_replace( '%_%', 2 == $current ? '' : $args['format'], $args['base'] );
     
    7174                 *
    7275                 * @param string $link The paginated link URL.
    7376                 */
    74                 $page_links[] = '<a class="prev page-numbers" href="' . esc_url( apply_filters( 'paginate_links', $link ) ) . '">' . $args['prev_text'] . '</a>';
     77                $page_link_data[] = array(
     78                        'type' => 'prev',
     79                        'link' => esc_url( apply_filters( 'paginate_links', $link ) ),
     80                        'text' => $prev_text,
     81                        'active' => false,
     82                );
    7583        endif;
    7684        for ( $n = 1; $n <= $total; $n++ ) :
    77                 if ( $n == $current ) :
    78                         $page_links[] = "<span class='page-numbers current'>" . $args['before_page_number'] . number_format_i18n( $n ) . $args['after_page_number'] . "</span>";
     85                if ( $args['show_all'] || ( $n <= $end_size || ( $current && $n >= $current - $mid_size && $n <= $current + $mid_size ) || $n > $total - $end_size ) ) :
     86                        $link = str_replace( '%_%', 1 == $n ? '' : $args['format'], $args['base'] );
     87                        $link = str_replace( '%#%', $n, $link );
     88                        if ( $add_args ) {
     89                                $link = add_query_arg( $add_args, $link );
     90                        }
     91                        $link .= $args['add_fragment'];
     92
     93                        /** This filter is documented in wp-includes/general-template.php */
     94                        $page_link_data[] = array(
     95                                'type' => 'page',
     96                                'link' => esc_url( apply_filters( 'paginate_links', $link ) ),
     97                                'text' => number_format_i18n( $n ),
     98                                'active' => ( $n == $current ),
     99                        );
    79100                        $dots = true;
    80                 else :
    81                         if ( $args['show_all'] || ( $n <= $end_size || ( $current && $n >= $current - $mid_size && $n <= $current + $mid_size ) || $n > $total - $end_size ) ) :
    82                                 $link = str_replace( '%_%', 1 == $n ? '' : $args['format'], $args['base'] );
    83                                 $link = str_replace( '%#%', $n, $link );
    84                                 if ( $add_args )
    85                                         $link = add_query_arg( $add_args, $link );
    86                                 $link .= $args['add_fragment'];
    87 
    88                                 /** This filter is documented in wp-includes/general-template.php */
    89                                 $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>";
    90                                 $dots = true;
    91                         elseif ( $dots && ! $args['show_all'] ) :
    92                                 $page_links[] = '<span class="page-numbers dots">' . __( '&hellip;' ) . '</span>';
    93                                 $dots = false;
    94                         endif;
     101                elseif ( $dots && !$args['show_all'] ) :
     102                        $page_link_data[] = array(
     103                                'type' => 'dots',
     104                                'link' => null,
     105                                'text' => __( '&hellip;' ),
     106                                'active' => false,
     107                        );
     108                        $dots = false;
    95109                endif;
    96110        endfor;
    97111        if ( $args['prev_next'] && $current && ( $current < $total || -1 == $total ) ) :
     
    102116                $link .= $args['add_fragment'];
    103117
    104118                /** This filter is documented in wp-includes/general-template.php */
    105                 $page_links[] = '<a class="next page-numbers" href="' . esc_url( apply_filters( 'paginate_links', $link ) ) . '">' . $args['next_text'] . '</a>';
     119                $page_link_data[] = array(
     120                        'type' => 'next',
     121                        'link' => esc_url( apply_filters( 'paginate_links', $link ) ),
     122                        'text' => $next_text,
     123                        'active' => false,
     124                );
     125        endif;
     126        // If we just want the data without the HTML, then we don't need to
     127        // process the HTML here.
     128        if ( $args['type'] != 'array_raw' ) :
     129                foreach ( $page_link_data as $page_link ) :
     130                        switch( $page_link['type'] ) {
     131                                case 'prev':
     132                                        $page_links[] = '<a class="prev page-numbers" href="' . $page_link['text'] . '">' . $prev_text . '</a>';
     133                                        break;
     134                                case 'next':
     135                                        $page_links[] = '<a class="next page-numbers" href="' . $page_link['text'] . '">' . $next_text . '</a>';
     136                                        break;
     137                                case 'dots':
     138                                        $page_links[] = '<span class="page-numbers dots">' . $page_link['text'] . '</span>';
     139                                        break;
     140                                case 'page':
     141                                        if ( ! $args['link_current'] && $page_link['active'] ) {
     142                                                $page_links[] = "<span class='page-numbers current'>" . $args['before_page_number'] . $page_link['text'] . $args['after_page_number'] . "</span>";
     143                                        } else {
     144                                                $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>";
     145                                        }
     146                                        break;
     147                        }
     148                endforeach;
    106149        endif;
    107150        switch ( $args['type'] ) {
     151                case 'array_raw' :
     152                        return $page_link_data;
     153
    108154                case 'array' :
    109155                        return $page_links;
    110156