Comment filtrer la liste des publications (dans la liste des publications du tableau de bord WP) à l'aide d'un champ personnalisé (fonctionnalité de recherche)?
1 réponses
- votes
-
- 2011-05-07
J'ai codé unpluginjustepour çaet jen'aijamaiseu letemps de lepublier:
Utilisation:
Dans la liste déroulante,vous avez une liste detous les champspersonnalisés,il vous suffit donc de sélectionner le champ sur lequel vous souhaitezfiltreret de cliquer surfiltre. si vous souhaitezfiltrer sur une valeur spécifique d'un champpersonnalisé,sélectionnez lenom du champ,entrez la valeur souhaitéeet cliquez surfiltrer.
<?php /* Plugin Name: Admin Filter BY Custom Fields Plugin URI: http://en.bainternet.info Description: Filter posts or pages in admin by custom fields (post meta) Version: 1.0 Author: Bainternet Author URI: http://en.bainternet.info */ add_filter( 'parse_query', 'ba_admin_posts_filter' ); add_action( 'restrict_manage_posts', 'ba_admin_posts_filter_restrict_manage_posts' ); function ba_admin_posts_filter( $query ) { global $pagenow; if ( is_admin() && $pagenow=='edit.php' && isset($_GET['ADMIN_FILTER_FIELD_NAME']) && $_GET['ADMIN_FILTER_FIELD_NAME'] != '') { $query->query_vars['meta_key'] = $_GET['ADMIN_FILTER_FIELD_NAME']; if (isset($_GET['ADMIN_FILTER_FIELD_VALUE']) && $_GET['ADMIN_FILTER_FIELD_VALUE'] != '') $query->query_vars['meta_value'] = $_GET['ADMIN_FILTER_FIELD_VALUE']; } } function ba_admin_posts_filter_restrict_manage_posts() { global $wpdb; $sql = 'SELECT DISTINCT meta_key FROM '.$wpdb->postmeta.' ORDER BY 1'; $fields = $wpdb->get_results($sql, ARRAY_N); ?> <select name="ADMIN_FILTER_FIELD_NAME"> <option value=""><?php _e('Filter By Custom Fields', 'baapf'); ?></option> <?php $current = isset($_GET['ADMIN_FILTER_FIELD_NAME'])? $_GET['ADMIN_FILTER_FIELD_NAME']:''; $current_v = isset($_GET['ADMIN_FILTER_FIELD_VALUE'])? $_GET['ADMIN_FILTER_FIELD_VALUE']:''; foreach ($fields as $field) { if (substr($field[0],0,1) != "_"){ printf ( '<option value="%s"%s>%s</option>', $field[0], $field[0] == $current? ' selected="selected"':'', $field[0] ); } } ?> </select> <?php _e('Value:', 'baapf'); ?><input type="TEXT" name="ADMIN_FILTER_FIELD_VALUE" value="<?php echo $current_v; ?>" /> <?php }
I coded a plugin just for that and never got around to publish it :
Usage:
In the dropdown you have a list of all custom fields, so just select the field you want to filter by and click filter. if you want to filter to a specific value of a custom field then select the field's name , enter the value you want and click filter.
<?php /* Plugin Name: Admin Filter BY Custom Fields Plugin URI: http://en.bainternet.info Description: Filter posts or pages in admin by custom fields (post meta) Version: 1.0 Author: Bainternet Author URI: http://en.bainternet.info */ add_filter( 'parse_query', 'ba_admin_posts_filter' ); add_action( 'restrict_manage_posts', 'ba_admin_posts_filter_restrict_manage_posts' ); function ba_admin_posts_filter( $query ) { global $pagenow; if ( is_admin() && $pagenow=='edit.php' && isset($_GET['ADMIN_FILTER_FIELD_NAME']) && $_GET['ADMIN_FILTER_FIELD_NAME'] != '') { $query->query_vars['meta_key'] = $_GET['ADMIN_FILTER_FIELD_NAME']; if (isset($_GET['ADMIN_FILTER_FIELD_VALUE']) && $_GET['ADMIN_FILTER_FIELD_VALUE'] != '') $query->query_vars['meta_value'] = $_GET['ADMIN_FILTER_FIELD_VALUE']; } } function ba_admin_posts_filter_restrict_manage_posts() { global $wpdb; $sql = 'SELECT DISTINCT meta_key FROM '.$wpdb->postmeta.' ORDER BY 1'; $fields = $wpdb->get_results($sql, ARRAY_N); ?> <select name="ADMIN_FILTER_FIELD_NAME"> <option value=""><?php _e('Filter By Custom Fields', 'baapf'); ?></option> <?php $current = isset($_GET['ADMIN_FILTER_FIELD_NAME'])? $_GET['ADMIN_FILTER_FIELD_NAME']:''; $current_v = isset($_GET['ADMIN_FILTER_FIELD_VALUE'])? $_GET['ADMIN_FILTER_FIELD_VALUE']:''; foreach ($fields as $field) { if (substr($field[0],0,1) != "_"){ printf ( '<option value="%s"%s>%s</option>', $field[0], $field[0] == $current? ' selected="selected"':'', $field[0] ); } } ?> </select> <?php _e('Value:', 'baapf'); ?><input type="TEXT" name="ADMIN_FILTER_FIELD_VALUE" value="<?php echo $current_v; ?>" /> <?php }
-
Pourquoine pas utiliser lafonction d'assistancepour votreboîte de sélection?c'est à dire.remplacer `$field [0]==$ current?'selected="selected"': '', `avec` sélectionné ($field [0]==$ courant,vrai,faux),`... :)Why not use the helper function for your selection box? ie. replace `$field[0] == $current? ' selected="selected"':'', ` with `selected( $field[0] == $current, true, false ),` ... :)
- 7
- 2011-07-18
- t31os
-
cette réponsene fonctionneplus.this answer doesn't work anymore.
- 0
- 2018-07-09
- Kir Mazur
-
Existe-t-il unmoyen de lefairefonctionner dans les dernières versions de WordPress?Is there a way to make it work in newest versions of WordPress?
- 0
- 2018-11-27
- nakkeru
Malgré lefait quej'aibeaucoup cherché sur Google,je n'aipastrouvé de réponse à une questiontrès simple:
J'ai quelques articles avec un champpersonnalisé (c'est-à-direnom_fournisseur).Je souhaitepouvoir rechercheret filtrermespublicationsen fonction de ce champpersonnalisé.En d'autrestermes,dans la liste despostes d'administration,je voudrais avoir un champ de recherche (nommé "Nom dufournisseur") oùje peuxtaper une valeur (ex. "IBM"),puis cliquer sur unbouton de recherche qui donnerame ramènetous les articles qui ont un champpersonnalisénommé "nom_fournisseur"et,sitelest le cas,la valeur du champpersonnalisé sera "IBM".
Commentpuis-jefaire cela?