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=%#%';
'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' => ''
$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 ) {
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;
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