J'ai remarqué que mes filtres de taxonomie personnalisés ne fonctionnaient plus dans l'administrateur 3.3.1 selon ces méthodes: Ajout d'un filtre de taxonomie à la liste des administrateurs pour un type de publication personnalisé?
J'ai également découvert que pour filtrer une taxonomie, la chaîne de requête nécessite la transmission de &taxonomy=whatever
et de &term=something
. Quelqu'un at-il une expérience dans ce domaine et des solutions à offrir?
Voici un exemple de code tiré de la question:
add_action('restrict_manage_posts','restrict_listings_by_business');
function restrict_listings_by_business() {
global $typenow;
global $wp_query;
if ($typenow=='listing') {
$taxonomy = 'business';
$business_taxonomy = get_taxonomy($taxonomy);
wp_dropdown_categories(array(
'show_option_all' => __("Show All {$business_taxonomy->label}"),
'taxonomy' => $taxonomy,
'name' => 'business',
'orderby' => 'name',
'selected' => $wp_query->query['term'],
'hierarchical' => true,
'depth' => 3,
'show_count' => true, // Show # listings in parens
'hide_empty' => true, // Don't show businesses w/o listings
));
}
}
et
add_filter('parse_query','convert_business_id_to_taxonomy_term_in_query');
function convert_business_id_to_taxonomy_term_in_query($query) {
global $pagenow;
$qv = &$query->query_vars;
if ($pagenow=='edit.php' &&
isset($qv['taxonomy']) && $qv['taxonomy']=='business' &&
isset($qv['term']) && is_numeric($qv['term'])) {
$term = get_term_by('id',$qv['term'],'business');
$qv['term'] = $term->slug;
}
}
Il y a quelques problèmes avec votre code ...
term
qui donne l'identifiant du terme, mais business
(dans ce cas), puisqu'il s'agit du nom que vous avez fourni pour le menu déroulant. Remplacez toutes les instances de term
par business
parse_query
.Ce qui suit a fonctionné pour moi (sauf que j'ai changé 'list' en 'post') ...
add_action('restrict_manage_posts','restrict_listings_by_business');
function restrict_listings_by_business() {
global $typenow;
global $wp_query;
if ($typenow=='post') {
$taxonomy = 'business';
$term = isset($wp_query->query['business']) ? $wp_query->query['business'] :'';
$business_taxonomy = get_taxonomy($taxonomy);
wp_dropdown_categories(array(
'show_option_all' => __("Show All"),
'taxonomy' => $taxonomy,
'name' => 'business',
'orderby' => 'name',
'selected' => $term,
'hierarchical' => true,
'depth' => 3,
'show_count' => true, // Show # listings in parens
'hide_empty' => true, // Don't show businesses w/o listings
));
}
}
add_filter('parse_query','convert_business_id_to_taxonomy_term_in_query');
function convert_business_id_to_taxonomy_term_in_query($query) {
global $pagenow;
$qv =& $query->query_vars;
if ($pagenow=='edit.php' && isset($qv['business']) && is_numeric($qv['business'])) {
$term = get_term_by('id',$qv['business'],'business');
$qv['business'] = ($term ? $term->slug : '');
}
}