Ticket #24606: 24606.6.diff
File 24606.6.diff, 7.9 KB (added by , 11 years ago) |
---|
-
src/wp-includes/general-template.php
2438 2438 * @return array|string String of page links or array of page links. 2439 2439 */ 2440 2440 function paginate_links( $args = '' ) { 2441 global $wp_query, $wp_rewrite; 2442 2443 $total = ( isset( $wp_query->max_num_pages ) ) ? $wp_query->max_num_pages : 1; 2444 $current = ( get_query_var( 'paged' ) ) ? intval( get_query_var( 'paged' ) ) : 1; 2445 $pagenum_link = html_entity_decode( get_pagenum_link() ); 2446 $query_args = array(); 2447 $url_parts = explode( '?', $pagenum_link ); 2448 2449 if ( isset( $url_parts[1] ) ) { 2450 wp_parse_str( $url_parts[1], $query_args ); 2451 } 2452 2453 $pagenum_link = remove_query_arg( array_keys( $query_args ), $pagenum_link ); 2454 $pagenum_link = trailingslashit( $pagenum_link ) . '%_%'; 2455 2456 $format = $wp_rewrite->using_index_permalinks() && ! strpos( $pagenum_link, 'index.php' ) ? 'index.php/' : ''; 2457 $format .= $wp_rewrite->using_permalinks() ? user_trailingslashit( $wp_rewrite->pagination_base . '/%#%', 'paged' ) : '?paged=%#%'; 2458 2441 2459 $defaults = array( 2442 'base' => '%_%', // http://example.com/all_posts.php%_% : %_% is replaced by format (below)2443 'format' => '?page=%#%', // ?page=%#% : %#% is replaced by the page number2444 'total' => 1,2445 'current' => 0,2460 'base' => $pagenum_link, // http://example.com/all_posts.php%_% : %_% is replaced by format (below) 2461 'format' => $format, // ?page=%#% : %#% is replaced by the page number 2462 'total' => $total, 2463 'current' => $current, 2446 2464 'show_all' => false, 2447 2465 'prev_next' => true, 2448 2466 'prev_text' => __('« Previous'), … … 2476 2494 $r = ''; 2477 2495 $page_links = array(); 2478 2496 $dots = false; 2479 $base = str_replace( '%_%', $args['format'], $args['base'] );2480 2497 2481 2498 if ( $args['prev_next'] && $current && 1 < $current ) : 2482 $link = str_replace( '%#%', $current - 1, $base ); 2499 $link = str_replace( '%_%', 2 == $current ? '' : $args['format'], $args['base'] ); 2500 $link = str_replace( '%#%', $current - 1, $link ); 2483 2501 if ( $add_args ) 2484 2502 $link = add_query_arg( $add_args, $link ); 2485 2503 $link .= $args['add_fragment']; … … 2499 2517 $dots = true; 2500 2518 else : 2501 2519 if ( $args['show_all'] || ( $n <= $end_size || ( $current && $n >= $current - $mid_size && $n <= $current + $mid_size ) || $n > $total - $end_size ) ) : 2502 $link = str_replace( '%#%', $n, $base ); 2520 $link = str_replace( '%_%', 1 == $n ? '' : $args['format'], $args['base'] ); 2521 $link = str_replace( '%#%', $n, $link ); 2503 2522 if ( $add_args ) 2504 2523 $link = add_query_arg( $add_args, $link ); 2505 2524 $link .= $args['add_fragment']; … … 2514 2533 endif; 2515 2534 endfor; 2516 2535 if ( $args['prev_next'] && $current && ( $current < $total || -1 == $total ) ) : 2517 $link = str_replace( '%#%', $current + 1, $base ); 2536 $link = str_replace( '%_%', $args['format'], $args['base'] ); 2537 $link = str_replace( '%#%', $current + 1, $link ); 2518 2538 if ( $add_args ) 2519 2539 $link = add_query_arg( $add_args, $link ); 2520 2540 $link .= $args['add_fragment']; -
tests/phpunit/tests/general/paginateLinks.php
6 6 7 7 function test_defaults() { 8 8 $expected =<<<EXPECTED 9 <a class='page-numbers' href=''>1</a> 9 <span class='page-numbers current'>1</span> 10 <a class='page-numbers' href='http://{WP_TESTS_DOMAIN}/?paged=2'>2</a> 11 <a class='page-numbers' href='http://{WP_TESTS_DOMAIN}/?paged=3'>3</a> 10 12 <span class="page-numbers dots">…</span> 11 <a class='page-numbers' href='?page=50'>50</a> 13 <a class='page-numbers' href='http://{WP_TESTS_DOMAIN}/?paged=50'>50</a> 14 <a class="next page-numbers" href="http://{WP_TESTS_DOMAIN}/?paged=2">Next »</a> 12 15 EXPECTED; 13 16 17 $expected = str_replace( '{WP_TESTS_DOMAIN}', WP_TESTS_DOMAIN, $expected ); 14 18 $links = paginate_links( array( 'total' => 50 ) ); 15 19 $this->assertEquals( $expected, $links ); 16 20 } … … 17 21 18 22 function test_format() { 19 23 $expected =<<<EXPECTED 20 <a class='page-numbers' href=''>1</a> 24 <span class='page-numbers current'>1</span> 25 <a class='page-numbers' href='http://{WP_TESTS_DOMAIN}/page/2/'>2</a> 26 <a class='page-numbers' href='http://{WP_TESTS_DOMAIN}/page/3/'>3</a> 21 27 <span class="page-numbers dots">…</span> 22 <a class='page-numbers' href='/page/50/'>50</a> 28 <a class='page-numbers' href='http://{WP_TESTS_DOMAIN}/page/50/'>50</a> 29 <a class="next page-numbers" href="http://{WP_TESTS_DOMAIN}/page/2/">Next »</a> 23 30 EXPECTED; 24 31 25 $links = paginate_links( array( 'total' => 50, 'format' => '/page/%#%/' ) ); 32 $expected = str_replace( '{WP_TESTS_DOMAIN}', WP_TESTS_DOMAIN, $expected ); 33 $links = paginate_links( array( 'total' => 50, 'format' => 'page/%#%/' ) ); 26 34 $this->assertEquals( $expected, $links ); 27 35 } 28 36 29 37 function test_prev_next_false() { 30 38 $expected =<<<EXPECTED 31 <a class='page-numbers' href=' '>1</a>39 <a class='page-numbers' href='http://{WP_TESTS_DOMAIN}/'>1</a> 32 40 <span class='page-numbers current'>2</span> 33 <a class='page-numbers' href=' ?page=3'>3</a>34 <a class='page-numbers' href=' ?page=4'>4</a>41 <a class='page-numbers' href='http://{WP_TESTS_DOMAIN}/?paged=3'>3</a> 42 <a class='page-numbers' href='http://{WP_TESTS_DOMAIN}/?paged=4'>4</a> 35 43 <span class="page-numbers dots">…</span> 36 <a class='page-numbers' href=' ?page=50'>50</a>44 <a class='page-numbers' href='http://{WP_TESTS_DOMAIN}/?paged=50'>50</a> 37 45 EXPECTED; 38 46 47 $expected = str_replace( '{WP_TESTS_DOMAIN}', WP_TESTS_DOMAIN, $expected ); 39 48 $links = paginate_links( array( 'total' => 50, 'prev_next' => false, 'current' => 2 ) ); 40 49 $this->assertEquals( $expected, $links ); 41 50 } … … 42 51 43 52 function test_prev_next_true() { 44 53 $expected =<<<EXPECTED 45 <a class="prev page-numbers" href=" ">« Previous</a>46 <a class='page-numbers' href=' '>1</a>54 <a class="prev page-numbers" href="http://{WP_TESTS_DOMAIN}/">« Previous</a> 55 <a class='page-numbers' href='http://{WP_TESTS_DOMAIN}/'>1</a> 47 56 <span class='page-numbers current'>2</span> 48 <a class='page-numbers' href=' ?page=3'>3</a>49 <a class='page-numbers' href=' ?page=4'>4</a>57 <a class='page-numbers' href='http://{WP_TESTS_DOMAIN}/?paged=3'>3</a> 58 <a class='page-numbers' href='http://{WP_TESTS_DOMAIN}/?paged=4'>4</a> 50 59 <span class="page-numbers dots">…</span> 51 <a class='page-numbers' href=' ?page=50'>50</a>52 <a class="next page-numbers" href=" ?page=3">Next »</a>60 <a class='page-numbers' href='http://{WP_TESTS_DOMAIN}/?paged=50'>50</a> 61 <a class="next page-numbers" href="http://{WP_TESTS_DOMAIN}/?paged=3">Next »</a> 53 62 EXPECTED; 54 63 64 $expected = str_replace( '{WP_TESTS_DOMAIN}', WP_TESTS_DOMAIN, $expected ); 55 65 $links = paginate_links( array( 'total' => 50, 'prev_next' => true, 'current' => 2 ) ); 56 66 $this->assertEquals( $expected, $links ); 57 67 } … … 95 105 ) ); 96 106 97 107 // It's supposed to link to page 1: 98 $this->assertTag( array( 'tag' => 'a', 'attributes' => array( 'href' => ' ?page=1' ) ), $links[0] );99 $this->assertTag( array( 'tag' => 'a', 'attributes' => array( 'href' => ' ?page=1' ) ), $links[1] );108 $this->assertTag( array( 'tag' => 'a', 'attributes' => array( 'href' => 'http://' . WP_TESTS_DOMAIN . '/' ) ), $links[0] ); 109 $this->assertTag( array( 'tag' => 'a', 'attributes' => array( 'href' => 'http://' . WP_TESTS_DOMAIN . '/' ) ), $links[1] ); 100 110 101 111 // It's not supposed to have an empty href. 102 112 $this->assertNotTag( array( 'tag' => 'a', 'attributes' => array( 'class' => 'prev page-numbers', 'href' => '' ) ), $links[0] ); … … 112 122 ) ); 113 123 114 124 $this->assertTag( array( 'tag' => 'span', 'attributes' => array( 'class' => 'current' ) ), $links[0] ); 115 $this->assertTag( array( 'tag' => 'a', 'attributes' => array( 'href' => ' ?page=2') ), $links[1] );125 $this->assertTag( array( 'tag' => 'a', 'attributes' => array( 'href' => 'http://' . WP_TESTS_DOMAIN . '/?paged=2' ) ), $links[1] ); 116 126 } 117 127 118 128 }