Last active
April 21, 2022 05:02
-
-
Save Jakobuz/017dcca449255d62bef9155102964b3a to your computer and use it in GitHub Desktop.
Wordpress | Filter the function wp_get_archives() so a category_id can be added
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* Filter the wp_get_archives() so a cat_id can be added | |
* Example: wp_get_cat_archives('type=monthly&format=option&show_post_count=1', 46); | |
* in this case '46' = the category id | |
*/ | |
add_filter('getarchives_where', 'custom_archives_where', 10, 2); | |
add_filter('getarchives_join', 'custom_archives_join', 10, 2); | |
function custom_archives_join($x, $r) { | |
global $wpdb; | |
// $cat_ID = $r['cat']; | |
$cat_ID = isset($r['cat']) ? $r['cat'] : ''; // prevents 'Notice: Undefined index: cat | |
if (isset($cat_ID)) { | |
return $x . " INNER JOIN $wpdb->term_relationships ON ($wpdb->posts.ID = $wpdb->term_relationships.object_id) INNER JOIN $wpdb->term_taxonomy ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id)"; | |
} else { | |
return $x; | |
} | |
} | |
function custom_archives_where($x, $r) { | |
global $wpdb; | |
// $cat_ID = $r['cat']; | |
$cat_ID = isset($r['cat']) ? $r['cat'] : ''; // prevents 'Notice: Undefined index: cat | |
if (isset($cat_ID)) { | |
return $x . " AND $wpdb->term_taxonomy.taxonomy = 'category' AND $wpdb->term_taxonomy.term_id IN ($cat_ID)"; | |
} else { | |
$x; | |
} | |
} | |
function wp_get_cat_archives($opts, $cat) { | |
$args = wp_parse_args($opts, array('echo' => '1')); // default echo is 1. | |
$echo = $args['echo'] != '0'; // remember the original echo flag. | |
$args['echo'] = 0; | |
$args['cat'] = $cat; | |
$tag = ($args['format'] === 'option') ? 'option' : 'li'; | |
$archives = wp_get_archives(build_query($args)); | |
$archs = explode('</'.$tag.'>', $archives); | |
$links = array(); | |
foreach ($archs as $archive) { | |
$link = preg_replace("/='([^']+)'/", "='$1?cat={$cat}'", $archive); | |
array_push($links, $link); | |
} | |
$result = implode('</'.$tag.'>', $links); | |
if ($echo) { | |
echo $result; | |
} else { | |
return $result; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Hello, why is this not working now? Please tell me how to fix?