#63091 closed defect (bug) (invalid)
wp_get_archives() with post_type parameter generates duplicate query parameters in URLs
| Reported by: |
|
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)
#2
@
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,
#4
@
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.
Environment
WordPress version: 6.7.2
Theme: Custom theme
Plugins: Occurs with all plugins deactivated
Permalink structure: /%year%/%monthnum%/%day%/%post_id%/