web-dev-qa-db-fra.com

Obtenir le filtre parse_query pour retourner au lieu de id

Après beaucoup de maux de tête la semaine dernière, j'ai l'impression que mon problème est presque résolu. J'ai essayé de personnaliser la page d'administration edit.php des types d'articles personnalisés pour afficher et trier/filtrer les taxonomies personnalisées. J'ai franchi une série d'actions et de filtres à partir d'éléments trouvés sur le Web, mais je crains que je n'utilise un code obsolète, car certains d'entre eux étaient assez anciens.

Je pense avoir réduit le problème à ce filtre

add_filter('parse_query','convert_large_feature_id_to_taxonomy_term_in_query');
function convert_large_feature_id_to_taxonomy_term_in_query($query) {
    global $pagenow;
    $qv = &$query->query_vars;
    if ($pagenow=='edit.php' &&
            isset($qv['taxonomy']) && $qv['taxonomy']=='large_feature' &&
            isset($qv['term']) && is_numeric($qv['term'])) {
        $term = get_term_by('id',$qv['term'],'large_feature');
        $qv['term'] = $term->slug;
    }
}   

Lorsque je choisis le menu déroulant pour large_feature, il affiche avec précision les "catégories" (est-ce que vous les appelez quand elles ont une taxonomie personnalisée?) Et le nombre de publications, mais quand il est filtré, la requête est vide. J'ai toutefois remarqué que lorsque j'ai modifié l'URL de la requête à partir de

http://www.ampeg.com/2012/wp-admin/edit.php?post_status=all&post_type=ampeg_artists&action=-1&m=0&cat=0&large_feature=291&paged=1&mode=list&action2=-1

à

http://www.ampeg.com/2012/wp-admin/edit.php?post_status=all&post_type=ampeg_artists&action=-1&m=0&cat=0&large_feature=home_page_large&paged=1&mode=list&action2=-1

Il affiche comme prévu.

Cela me porte à croire que ce filtre ne fournit pas le slug comme il est supposé ... bon?

1
kristina childs

taxonomy & term ne seront pas définis (dans ce cas), car les vars de requête sont mappés à partir de GET/POST.

En d'autres termes, $qv['large_feature'] = 291 (voir wp_edit_posts_query() et WP_Query::get_posts() pour une vue d'ensemble).

add_filter( 'parse_query','convert_large_feature_id_to_taxonomy_term_in_query' );

function convert_large_feature_id_to_taxonomy_term_in_query( $query ) {
    global $pagenow;

    $qv =& $query->query_vars;

    if (
        $pagenow == 'edit.php' &&
        isset( $qv['large_feature'] ) &&
        ctype_digit( $qv['large_feature'] ) // stricter than is_numeric()
    ) {
        if ( $term = get_term_by( 'id', $qv['large_feature'], 'large_feature' ) )
            $qv['large_feature'] = $term->slug;
    }
} 
1
TheDeadMedic