web-dev-qa-db-fra.com

Filtrer les termes de taxonomie en utilisant plusieurs identifiants dans le fichier edit-tags.php

Je souhaite utiliser la fonction de recherche edit-tags.php avec plusieurs identificateurs de terme. Par exemple, si je tape dans la zone de recherche quelque chose comme ceci: # 1245 & 6832, il devrait afficher ces deux termes dans la table des résultats (WP_Terms_List_Table).

J'ai essayé d'utiliser l'action pre_get_posts pour accéder à la requête en cours d'exécution pour la recherche, mais cela ne fait que me montrer une requête "vide":

add_action('pre_get_posts', 'filter_terms_by_ids' );

function filter_terms_by_ids( $wp_query ) {
    global $pagenow;

    if($pagenow == 'edit-tags.php' && $_GET['s']):
        print_r($wp_query->query_vars);
    endif;

}

Mon idée est de vérifier le $ _GET ['s'] et si # est le premier caractère, je peux modifier la requête pour inclure uniquement ces termes dans la recherche:

if ('#' == substr($_GET['s'],0,1))
2
passatgt

C'est facile à mettre en œuvre. Tout ce dont vous avez besoin est votre propre crochet pour le filtre get_terms_args:

add_filter( 'get_terms_args', 'wpse8170_get_terms_args', 10, 2  );
function wpse8170_get_terms_args( $args, $taxonomies ) {
    if ( !in_array( 'post_tag', $taxonomies ) ) {
        return $args;
    }

    $matches = array();
    if ( empty( $args['search'] ) || !preg_match( '/^\#(.*)$/', $args['search'], $matches ) ) {
        return $args;
    }

    if ( count( $matches ) == 2 ) {
        $args['search'] = '';
        $args['include'] = array_filter( array_map( 'intval', explode( '&', $matches[1] ) ) );
    }

    return $args;
}
1
Eugene Manuilov