Make WordPress Core

Opened 11 months ago

Closed 6 weeks ago

Last modified 5 weeks ago

#63091 closed defect (bug) (invalid)

wp_get_archives() with post_type parameter generates duplicate query parameters in URLs

Reported by: childsview's profile childsview Owned by:
Milestone: Priority: normal
Severity: normal Version: 6.7.2
Component: Taxonomy Keywords:
Focuses: Cc:

Description

When using wp_get_archives() with a custom post_type parameter, the function generates URLs with duplicate query parameters. For example, when using:

wp_get_archives(array(
'type' => 'yearly',
'post_type' => 'magazine'
));

The generated URLs look like:

https://example.com/2023/?post_type=magazine?post_type=magazine

Instead of the expected:

https://example.com/2023/?post_type=magazine

This duplicate query parameter causes issues when trying to access these archive pages, as the URL is malformed with two question marks.

Steps to Reproduce

Create a custom post type (e.g., 'magazine')

Add several posts to this custom post type with different dates spanning multiple years

Add the following code to a template file:

wp_get_archives(array(
'type' => 'yearly',
'post_type' => 'magazine'
));

View the page and inspect the generated archive links

Expected Result

Archive links should have a single query parameter:

https://example.com/2023/?post_type=magazine

Actual Result

Archive links have duplicate query parameters:

https://example.com/2023/?post_type=magazine?post_type=magazine

Environment

WordPress version: [Your WP version]

Theme: [Your theme, but also tested with default theme]

Plugins: [List plugins, or note that it happens with all plugins deactivated]

Permalink structure: [Your permalink structure]

Workaround

Currently using a filter to fix the URLs:

function fix_duplicate_post_type_query($link_html) {
return preg_replace('/?post_type=([^&]+)?post_type=\1/', '?post_type=$1', $link_html);
}
add_filter('get_archives_link', 'fix_duplicate_post_type_query');

Change History (5)

#1 @childsview
11 months ago

Environment

WordPress version: 6.7.2
Theme: Custom theme
Plugins: Occurs with all plugins deactivated
Permalink structure: /%year%/%monthnum%/%day%/%post_id%/

#2 @hbhalodia
7 weeks ago

Hi @childsview, I am not able to reproduce this issue anymore. Could you please help test the issue again and let us know if you are facing the issue again or else we are good to close the issue.

Test version: WP 6.9

Thank You,

Last edited 7 weeks ago by hbhalodia (previous) (diff)

#3 @hbhalodia
7 weeks ago

  • Keywords needs-testing added

#4 @childsview
6 weeks ago

  • Resolution set to invalid
  • Status changed from new to closed

Hi, thank you for testing and following up on this issue.

I have tested this on WP 6.9 and can confirm that the issue no longer occurs. After further investigation, I found that this was not a WordPress core bug, but rather an issue with my custom theme code.

The problem was caused by the following custom filters in my theme:

add_filter('getarchives_where', 'my_getarchives_where', 10, 2);
function my_getarchives_where($where, $r)
{
  global $my_archives_post_type;
  if (isset($r['post_type'])) {
    $my_archives_post_type = $r['post_type'];
    $where = str_replace('\'post\'', '\'' . $r['post_type'] . '\'', $where);
  } else {
    $my_archives_post_type = '';
  }
  return $where;
}

add_filter('get_archives_link', 'my_get_archives_link');
function my_get_archives_link($link_html)
{
  global $my_archives_post_type;
  $add_link = '';
  if ('' != $my_archives_post_type)
    $add_link .= '?post_type=' . $my_archives_post_type;
  $link_html = preg_replace("/href=\'(.+)\'/", "href='$1" . $add_link . "'", $link_html);

  return $link_html;
}

This issue can now be closed. Thank you for your assistance.

#5 @sabernhardt
5 weeks ago

  • Keywords needs-testing removed
  • Milestone Awaiting Review deleted

Good to hear you solved it!

Note: See TracTickets for help on using tickets.