Comment filtrer une publication (dans un tableau de publications WP) à l'aide d'un champ personnalisé (fonctionnalité de recherche)?

37

Malgré le fait que j'ai beaucoup cherché sur Google, je n'ai pas trouvé de réponse à une question très simple:

J'ai des publications avec un champ personnalisé (c'est-à-dire nom_fournisseur). J'aimerais pouvoir rechercher et filtrer mes publications en fonction de ce champ personnalisé. En d’autres termes, dans la liste des publications de l’administrateur, j’aimerais avoir un champ de recherche (nommé "nom du fournisseur") dans lequel je peux saisir une valeur (par exemple, "IBM"), puis cliquer sur un bouton de recherche qui vous donnera toutes les publications qui ont un champ personnalisé nommé "nom_fournisseur" et, le cas échéant, la valeur du champ personnalisé sera "IBM".

Comment puis-je faire cela?

    
posée jean04 07.05.2011 - 13:41

1 réponse

45

J'ai codé un plugin rien que pour ça et je n'ai jamais pu le publier:

Utilisation:

Danslemenudéroulant,vousavezunelistedetousleschampspersonnalisés.IlvoussuffitdoncdesélectionnerlechampquevoussouhaitezfiltreretdecliquersurFiltrer.sivoussouhaitezfiltrerunevaleurspécifiqued'unchamppersonnalisé,sélectionnezlenomduchamp,entrezlavaleursouhaitéeetcliquezsurFiltrer.

<?php/*PluginName:AdminFilterBYCustomFieldsPluginURI:http://en.bainternet.infoDescription:Filterpostsorpagesinadminbycustomfields(postmeta)Version:1.0Author:BainternetAuthorURI:http://en.bainternet.info*/add_filter('parse_query','ba_admin_posts_filter');add_action('restrict_manage_posts','ba_admin_posts_filter_restrict_manage_posts');functionba_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'];}}functionba_admin_posts_filter_restrict_manage_posts(){global$wpdb;$sql='SELECTDISTINCTmeta_keyFROM'.$wpdb->postmeta.'ORDERBY1';$fields=$wpdb->get_results($sql,ARRAY_N);?><selectname="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
}
    
réponse donnée Bainternet 07.05.2011 - 17:06

Lire d'autres questions sur les étiquettes