WordPress 4.1.1
[autoinstalls/wordpress.git] / wp-includes / general-template.php
index 8655ceed2154e26a87d2036ccd5adc5a157a72ff..56f4eec2587d3e03841e112de2317da7b4d22028 100644 (file)
@@ -2587,20 +2587,18 @@ function language_attributes($doctype = 'html') {
 function paginate_links( $args = '' ) {
        global $wp_query, $wp_rewrite;
 
-       $total        = ( isset( $wp_query->max_num_pages ) ) ? $wp_query->max_num_pages : 1;
-       $current      = ( get_query_var( 'paged' ) ) ? intval( get_query_var( 'paged' ) ) : 1;
+       // Setting up default values based on the current URL.
        $pagenum_link = html_entity_decode( get_pagenum_link() );
-       $query_args   = array();
        $url_parts    = explode( '?', $pagenum_link );
 
-       if ( isset( $url_parts[1] ) ) {
-               wp_parse_str( $url_parts[1], $query_args );
-               $query_args = urlencode_deep( $query_args );
-       }
+       // Get max pages and current page out of the current query, if available.
+       $total   = isset( $wp_query->max_num_pages ) ? $wp_query->max_num_pages : 1;
+       $current = get_query_var( 'paged' ) ? intval( get_query_var( 'paged' ) ) : 1;
 
-       $pagenum_link = remove_query_arg( array_keys( $query_args ), $pagenum_link );
-       $pagenum_link = trailingslashit( $pagenum_link ) . '%_%';
+       // Append the format placeholder to the base URL.
+       $pagenum_link = trailingslashit( $url_parts[0] ) . '%_%';
 
+       // URL base depends on permalink settings.
        $format  = $wp_rewrite->using_index_permalinks() && ! strpos( $pagenum_link, 'index.php' ) ? 'index.php/' : '';
        $format .= $wp_rewrite->using_permalinks() ? user_trailingslashit( $wp_rewrite->pagination_base . '/%#%', 'paged' ) : '?paged=%#%';
 
@@ -2616,7 +2614,7 @@ function paginate_links( $args = '' ) {
                'end_size' => 1,
                'mid_size' => 2,
                'type' => 'plain',
-               'add_args' => $query_args, // array of query args to add
+               'add_args' => array(), // array of query args to add
                'add_fragment' => '',
                'before_page_number' => '',
                'after_page_number' => ''
@@ -2624,6 +2622,21 @@ function paginate_links( $args = '' ) {
 
        $args = wp_parse_args( $args, $defaults );
 
+       if ( ! is_array( $args['add_args'] ) ) {
+               $args['add_args'] = array();
+       }
+
+       // Merge additional query vars found in the original URL into 'add_args' array.
+       if ( isset( $url_parts[1] ) ) {
+               // Find the format argument.
+               $format_query = parse_url( str_replace( '%_%', $args['format'], $args['base'] ), PHP_URL_QUERY );
+               wp_parse_str( $format_query, $format_arg );
+
+               // Remove the format argument from the array of query arguments, to avoid overwriting custom format.
+               wp_parse_str( remove_query_arg( array_keys( $format_arg ), $url_parts[1] ), $query_args );
+               $args['add_args'] = array_merge( $args['add_args'], urlencode_deep( $query_args ) );
+       }
+
        // Who knows what else people pass in $args
        $total = (int) $args['total'];
        if ( $total < 2 ) {
@@ -2638,7 +2651,7 @@ function paginate_links( $args = '' ) {
        if ( $mid_size < 0 ) {
                $mid_size = 2;
        }
-       $add_args = is_array( $args['add_args'] ) ? $args['add_args'] : false;
+       $add_args = $args['add_args'];
        $r = '';
        $page_links = array();
        $dots = false;
@@ -3113,3 +3126,18 @@ function wp_heartbeat_settings( $settings ) {
 
        return $settings;
 }
+
+/**
+ * Temporary function to add a missing style rule to the themes page.
+ * This avoids the need to ship an entirely rebuilt wp-admin.css in partial builds.
+ *
+ * @since 4.1.1
+ * @ignore
+ */
+function _wp_add_themesphp_notice_styling() {
+       global $pagenow;
+       if ( 'themes.php' == $pagenow ) {
+               echo "<style type='text/css'>.themes-php div.notice { margin: 0 0 20px 0; clear: both; }</style>\n";
+       }
+}
+add_action( 'admin_head', '_wp_add_themesphp_notice_styling' );
\ No newline at end of file