Comment effectuer une recherche dans les champs personnalisés d'ACF dans Wordpress om Fields in Wordpress

Comment effectuer une recherche dans les champs personnalisés d'ACF dans Wordpress om Fields in Wordpress
Categories
Technologies
Author

Nat Outsourcify

Lead Web Developer
Date

Comme nous l’avons déjà mentionné dans un article, chez Outsourcify, nous favorisons l’utilisation du plugin ACF pour ajouter des champs personnalisés au contenu WordPress. En bref, il permet d’ajouter des champs supplémentaires aux messages WordPress, ACF offre un large éventail de types de champs – texte, zone de texte, textes riches, images, galeries d’images, liens vers d’autres pages, etc – qui permet de structurer les données d’une bien meilleure façon que le simple collage dans le texte éditeur. Ceci a été en quelque sorte amélioré avec l’introduction de l’éditeur Gutenberg dans WordPress 5.0.0 en décembre 2018, mais comme nous l’avons expliqué, notre choix est decombiner le nouvel éditeur avec ACF.

Recherche dans tous les champs, y compris les champs personnalisés

ACF signifie Advanced Custom Fields (Champs personnalisés avancés) et ne s’appuie en fait que sur les « champs personnalisés » existants de WordPress, en ajoutant une interface utilisateur plus ergonomique et des types champs supplémentaires. Malheureusement, une chose qui manque à WordPress
est la possibilité de rechercher n’importe où, y compris dans les champs personnalisés.

La plupart des ressources en ligne proposeront d’installer un plugin, il y en a en fait beaucoup qui traitent de la fonction de recherche, mais comme toujours dans un tel cas, nous nous demandons toujours si un plugin est vraiment nécessaire et si ce que nous voulons réaliser ne peut être fait en ajoutant quelques lignes de code à notre thème.

Une solution simple sans plugin

Fondamentalement, la seule chose nécessaire est d’ajouter ces quelques lignes de code dans le fichier functions.php de votre thème :

// Make the search to index custom
/**
 * Extend WordPress search to include custom fields
 * http://adambalee.com
 *
 * Join posts and postmeta tables
 * http://codex.wordpress.org/Plugin_API/Filter_Reference/posts_join
 */
function cf_search_join( $join ) {
    global $wpdb;
    if ( is_search() ) {    
        $join .=' LEFT JOIN '.$wpdb->postmeta. ' ON '. $wpdb->posts . '.ID = ' . $wpdb->postmeta . '.post_id ';
    }
    return $join;
}
add_filter('posts_join', 'cf_search_join' );

/**
 * Modify the search query with posts_where
 * http://codex.wordpress.org/Plugin_API/Filter_Reference/posts_where
 */
function cf_search_where( $where ) {
    global $pagenow, $wpdb;
    if ( is_search() ) {
        $where = preg_replace(
            "/(s*".$wpdb->posts.".post_titles+LIKEs*('[^']+')s*)/",
            "(".$wpdb->posts.".post_title LIKE $1) OR (".$wpdb->postmeta.".meta_value LIKE $1)", $where );
    }
    return $where;
}
add_filter( 'posts_where', 'cf_search_where' );

/**
 * Prevent duplicates
 * http://codex.wordpress.org/Plugin_API/Filter_Reference/posts_distinct
 */
function cf_search_distinct( $where ) {
    global $wpdb;
    if ( is_search() ) {
        return "DISTINCT";
    }
    return $where;
}
add_filter( 'posts_distinct', 'cf_search_distinct' );

Une façon encore plus agréable serait de mettre ce code dans un fichier séparé et de l’extraire du fichier functions.php, qui apporte une plus grande flexibilité.

require_once( 'includes/functions/admin_search_custom_fields.php' );

Dans tous nos thèmes, nous incluons un certain nombre de petits scripts comme celui-ci pour gérer des tâches spécifiques, améliorer WordPress si nécessaire sur ce projet particulier, nous avons par exemple des scripts pour :

  • Améliorez le tableau de bord : il ajoute tous les messages personnalisés au widget « dashboard right now », pratique car nous utilisons presque toujours des messages personnalisés.
  • Personnaliser le panneau d’administration : il remplacera les logos et les liens WordPress et ajoutera des informations sur Outsourcify et des liens vers nos pages de support et de contact.
  • Une en-tête claire : celle-ci supprime tout l’encombrement ajouté par WordPress à l’en-tête HTML des pages.
  • Renommer les articles : très simple mais toujours utile, nous ne voulons surtout pas appeler les articles « posts », quelque chose autour des lignes « articles de blog » ou « articles » simples est beaucoup plus évident pour nos clients.
  • Supprimer la barre d’administration : pour supprimer la barre d’administration sur le front-end du site, elle reste très souvent dans le chemin et endommage le design.
  • Colonnes dans le panneau d’administration : une autre excellente façon d’éviter un autre plugin, il suffit d’ajouter des colonnes supplémentaires dans les tableaux des pages de la liste du panneau d’administration par programmation. L’utilisation d’un plugin comme Admin Columns Pro est exagérée (et non gratuite) lorsque vous souhaitez simplement ajouter une vignette et une colonne de taxonomie personnalisée à vos tables.

')}

Nat Outsourcify · Lead Web Developer

He overlooks the Javascript e-learning and Wordpress projects in the company.

Add comment

Related blog articles