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))
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;
}