X

Comment filtrer vos articles et pages par champ personnalisé dans le tableau de bord WordPress

Extraits par IsItWP

Vous cherchez à filtrer vos articles par champ personnalisé dans l'administration WordPress ? Cet extrait ajoutera un nouveau menu déroulant de champs personnalisés à vos listes d'articles et de pages WordPress. Le menu affichera une liste de tous les champs personnalisés. Pour filtrer les articles et les pages, il vous suffit de sélectionner le champ par lequel vous souhaitez filtrer.

ajouter un menu déroulant pour filtrer par champ personnalisé admin

Instructions :

Tout ce que vous avez à faire est d'ajouter ce code au fichier functions.php de votre thème ou dans un plugin spécifique au site :

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
}

Remarque : Si c'est la première fois que vous ajoutez des extraits de code dans WordPress, veuillez consulter notre guide sur comment copier / coller correctement des extraits de code dans WordPress, afin de ne pas casser accidentellement votre site.

Si vous avez aimé cet extrait de code, veuillez envisager de consulter nos autres articles sur le site comme : 62 meilleurs thèmes de blog WordPress gratuits ou 7 meilleurs plugins de formulaire de contact WordPress.

Commentaires   Laisser une réponse

  1. Bonjour, est-il possible de n'afficher cela que sur un certain type d'article ? Merci

  2. Bonjour, merci pour le code, mais malheureusement il ne fonctionne pas pour moi. Le menu déroulant de sélection apparaît au-dessus de la liste des articles et contient les bons champs personnalisés, mais si j'écris une valeur, aucun résultat ne s'affiche, même s'il y a un certain nombre d'articles qui ont cette valeur dans ce champ personnalisé.

  3. salut je veux utiliser ça pour les articles personnalisés des utilisateurs, comment le code va changer quelqu'un peut m'aider !!

  4. Toujours en bon fonctionnement. Merci, excellent extrait !

  5. Excellent. L'article est un peu ancien, mais je viens de copier-coller le code dans mon fichier functions et il fonctionne parfaitement. (OK, pas "parfaitement" en termes d'affichage, mais le réglage est mon problème ! Fonctionnellement, il semble parfait.) [WP 4.2.2] Je voulais cette fonctionnalité depuis des lustres... et la trouver a été si facile une fois que j'ai décidé de faire quelque chose à ce sujet. Merci ÉNORMÉMENT ! 🙂

  6. Salvatore Capolupo January 3, 2015 at 4:13 pm

    Je cherchais quelque chose comme ça. Pas si facile, et utile. Merci 🙂

  7. Bonjour à tous, quelqu'un peut-il m'aider à créer une fonction personnalisée pour trier l'ordre des articles sans plugin ? Je voudrais inclure la possibilité de trier l'ordre des articles comme les pages...

    J'ai un code comme add_filter( ‘parse_query’, ‘my_custom_post_sort’ );

    mais je ne sais pas comment continuer...

  8. Salut,

    Je viens de tomber sur votre extrait de filtre de champ personnalisé.

    Est-il possible de filtrer aussi les tags ? Une idée de ce que je dois changer ?

    Santé

  9. Bonjour, cela semble vraiment très intéressant...

    Mais malheureusement, ce n'est pas exactement ce que je cherche depuis longtemps.

    Je déteste vraiment la recherche dans la médiathèque. Quel est le but d'une recherche qui ne parvient pas à trouver certaines pièces jointes, ni par (sous)chaîne dans les NOMS DE FICHIER, ni par ID, les chaînes dans ALT ou LÉGENDE, CHAMPS PERSONNALISÉS, TAGS etc.. Ces capacités de recherche standard sont présentes dans tous les CMS sauf WP. Très étrange. Avez-vous une idée pour ajouter quelque chose comme ça à la médiathèque « upload.php » et « media-upload.php » (fenêtre pop-up pour l'insertion de pièces jointes à une page/publication) ?

    Je crains de ne pas être capable de le faire moi-même, c'est juste au-dessus de mes connaissances en PHP. Mais il semble que vous ayez le code prêt pour le lancement ! Dans tous les cas, cet exemple est une source d'inspiration pour moi.
    :-))

    1. Si vous n'ajoutez aucune information ou mot-clé à vos enregistrements multimédias, comment devriez-vous les trouver ?
      Bien sûr, la recherche WP est très limitée, mais pour les médias, cela fonctionne bien si vous ajoutez de bonnes balises ALT à chaque image 😉

      1. POURQUOI l'ajouter aux métadonnées ? Généralement, le NOM DE FICHIER, l'ID, l'auteur, etc. – toutes les informations sont présentes dans la base de données. Une requête SQL intelligente peut renvoyer les données. Sans mentionner les colonnes problématiques de tri ASC/DESC – je veux dire les nouvelles colonnes ajoutées via function.php (Taille du fichier, ID, etc.) Je pense que le problème est évident.

  10. Excellent article, merci !

  11. C'est incroyable.
    Existe-t-il un moyen d'afficher le filtre uniquement sur une page d'édition de type de publication personnalisé ?

    J'ai essayé de mettre
    if (isset($_GET[‘post_type’]) && $_GET[‘post_type’] == ‘product’)
    dans le filtre, mais cela ne semble pas fonctionner.

  12. Excellent article, merci Kevin. Je l'implémente maintenant sur mes sites !

    1. Cool, content de l'apprendre.

  13. Salut Kevin ! Beau snippet !
    Mais j'ai un problème avec ça... il m'est impossible de filtrer la liste d'administration des articles par plusieurs filtres.
    Si je filtre par mon champ personnalisé et par catégorie, alors... cela ne me donne aucun résultat (pourtant il y en a).

    que peut-il se passer ?

    1. Je suis sûr que plusieurs valeurs seraient possibles, mais ce n'est pas quelque chose que j'ai examiné, je vais approfondir un peu et voir comment faire quelque chose de similaire dans un futur extrait.

  14. Je viens d'implémenter votre code et il fonctionne parfaitement pour l'objectif énoncé. Avec votre code, je peux rapidement voir quels articles ont une entrée pour un champ personnalisé particulier, cependant, j'espère qu'il existe un moyen de montrer quels articles n'ont pas d'entrée pour ce même champ personnalisé, afin qu'il me soit plus facile de revenir en arrière et d'ajouter l'entrée manquante au lieu d'avoir à ouvrir chaque article individuellement pour voir s'il contient des données dans ce champ personnalisé particulier.  Toutes vos réflexions sont grandement appréciées.  Merci !

    1. Eh bien, la meilleure façon serait d'ajouter la valeur du champ personnalisé à la liste des articles de l'administrateur, vous pourriez modifier cet extrait pour faire quelque chose comme ça.

      http://wpsnipp.com/index.php/functions-php/add-featured-thumbnail-to-admin-post-columns/

      1. J'ai fini par trouver un plugin appelé « Mass Custom Fields Manager » qui m'a permis d'identifier tous mes articles qui n'avaient pas le champ personnalisé que je voulais et d'ajouter automatiquement le champ avec une valeur de mon choix.  J'ai ensuite pu utiliser votre fonctionnalité avec succès pour filtrer cette nouvelle valeur.  Ça fonctionne à merveille.  Cela m'a évité d'avoir à trier manuellement près de 2 000 articles.  Merci !!

        1. Cool, content d'apprendre que vous avez réussi à faire fonctionner les choses, 2000 articles seraient certainement beaucoup à mettre à jour à la main. Pas de problème, content d'avoir pu aider !

  15. Bon extrait, merci.
    Je vais le modifier pour qu'il fonctionne pour la section des pages.

    1. Content d'apprendre que le snippet vous plaît, si vous apportez des modifications, renvoyer les modifications à wpsnipp.com via notre formulaire de contribution http://wpsnipp.com/index.php/contribute/ serait formidable pour nos visiteurs. Profitez bien du snippet !

    2. Salut Finalwebsites, avez-vous modifié le code ? Pouvez-vous m'aider ?

      1. Salut,
        oui, j'ai réussi à le faire fonctionner, essayez la fonction sur cette page :
        http://www.finalwebsites.com/blog/wordpress/add-a-parent-pages-filter-function-your-wordpress-admin-section/

        1. Merci d'avoir posté la mise à jour du snippet,

        2. Merci ! Mais le lien me donne un timeout !

  16. Kevin,

    merci pour le snippet. Il fonctionne parfaitement. Je suis curieux, est-ce que le 'ba' dans ba_admin_posts_filter() signifie blog admin ?

    1. Le nom de la fonction ba_admin_posts_filter() est juste une fonction personnalisée, cela pourrait être n'importe quoi. Cependant, dans ce cas, l'auteur du snippet a inclus une partie du nom de son domaine, en.bainternet.info, comme ba_

      1. Kevin, voici un snippet que j'ai écrit pour que le filtre puisse avoir des jokers '%' et '_', au cas où quelqu'un voudrait quelque chose comme ça :

        function ba_admin_where_filter($where){    if (strpos($where, ‘meta_value’) !== FALSE) { $where = preg_replace(‘/(.meta_value[^=]*)=(.*)$/U’, “$1 LIKE $2″, $where);  } return $where;}add_filter( ‘posts_where_request’, ‘ba_admin_where_filter’ );FYI, si vous spécifiez 0 comme filtre, il renvoie tous les articles. C'est vrai aussi pour votre code d'origine. Je pensais que c'était parce que$_GET[‘ADMIN_FILTER_FIELD_VALUE’] != ”

        évalue à faux, j'ai donc essayé 
        strval($_GET[‘ADMIN_FILTER_FIELD_VALUE’]) != ""

        mais il a quand même renvoyé tous les articles. Tant pis.

        1. Kevin, y a-t-il un moyen d'afficher également les champs cachés (c'est-à-dire ceux qui commencent par un underscore) ? Merci.

  17. Cliff Paulick July 25, 2011 at 5:31 pm

    Existe-t-il un moyen de créer une recherche front-end, basée sur des champs personnalisés ou des taxonomies personnalisées ?

    1. Eh bien, cet extrait spécifique est pour le filtrage admin, vous pourriez ajouter la possibilité que WordPress recherche également les champs personnalisés. Cependant, avec tout cela dit, je vous recommande le plugin search everything.  http://wordpress.org/extend/plugins/search-everything/

      1. Cliff Paulick July 25, 2011 at 6:37 pm

        Oui, j'ai vu celui-là et d'autres. Je me demandais juste si vous aviez quelque chose de différent/mieux – je cherche surtout un moyen de synchroniser les options de recherche.
        Par exemple : Si la ville = Tulsa, alors restreindre l'état à une seule option = Oklahoma. Ou si vous choisissez Oklahoma en premier, alors changer la liste déroulante des villes pour n'afficher que les villes de l'Oklahoma… Puis appuyer sur « Rechercher ».

        Merci encore.

        1. Rien de ce que j'ai posté jusqu'à présent, cependant vous pouvez ajouter la sélection de catégories à la recherche. J'utilise cette option dans la boîte de recherche sur wpsnipp.com, je pourrais configurer les villes comme catégories.

          http://wpsnipp.com/index.php/cat/search-category-with-dropdown/

Ajouter un commentaire

Nous sommes ravis que vous ayez choisi de laisser un commentaire. Veuillez garder à l'esprit que tous les commentaires sont modérés conformément à notre politique de confidentialité, et tous les liens sont nofollow. N'utilisez PAS de mots-clés dans le champ du nom. Ayons une conversation personnelle et significative.

Liste de contrôle de lancement WordPress

La checklist ultime pour lancer un WordPress

Nous avons compilé tous les éléments essentiels de la liste de contrôle pour le lancement de votre prochain site Web WordPress dans un ebook pratique.
Oui, envoyez-moi l'eBook gratuit !