web-dev-qa-db-fra.com

restrict_manage_posts ne fonctionne pas dans 3.3.1

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;
    }
}
5
Niels

Il y a quelques problèmes avec votre code ...

  1. lors du filtrage, ce n'est pas 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
  2. La taxonomie n'est pas définie lors du filtrage. Supprimez cette vérification de la fonction 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 : '');
    }
}
4
Stephen Harris