Actualités WEB et WordPress, thèmes, plugins. Ici, nous partageons des conseils et les meilleures solutions de sites Web.

Rechercher les métadonnées de publication dans la zone d’administration de WordPress

31

Après avoir travaillé avec WordPress pendant une période prolongée, il est probable que vous ayez travaillé avec des métadonnées de publication dans une certaine mesure. Peut-être avez-vous simplement lu les métadonnées de la base de données, ou peut-être avez-vous également écrit et lu dans la table de la base de données.

Il peut s’agir d’une API très puissante chaque fois que vous avez besoin d’associer certaines informations à vos publications (ou, si vous aimez encore plus abstraire les choses, à vos modèles).

Cela dit, que se passe-t-il lorsque vous souhaitez inclure des informations de la table de métadonnées mais que vous n’avez pas la commodité de plugins tels que SearchWP ou Relevanssi?

De plus, supposons que le cas d’utilisation concerne uniquement les administrateurs et uniquement la zone d’administration de WordPress. Autrement dit, vous souhaitez rechercher vos publications à partir de l’ écran Toutes les publications, mais vous souhaitez également inclure les métadonnées de la publication dans les critères de recherche.

Quoi alors ?

Recherche de métadonnées de publication

Par défaut, chaque fois que vous recherchez des articles dans la zone d’administration de WordPress, il recherche une phrase dans le titre de l’article, l’extrait de l’article et le contenu de l’article, puis renvoie ces résultats.

Donc, pour étendre la recherche afin d’inclure les métadonnées de publication, nous devons mettre à jour la requête exécutée de sorte qu’elle intègre les tables de métadonnées de publication. Mais il y a plus que cela. Plus précisément, pour une flexibilité maximale et une expérience utilisateur optimale, vous souhaiterez :

  • inclure des parties d’une phrase afin qu’il ne se contente pas de rechercher quelque chose textuellement dans l’article,
  • et, bien sûr, gérez correctement le cas où aucun terme de recherche n’est entré afin que l’ écran Tous les messages puisse toujours être affiché dans son format standard.

Cela signifie que nous n’avons pas seulement besoin de modifier la requête de recherche pour inclure une méta-clé et une méta-valeur, mais nous devons également échapper correctement des phrases entières afin que nous puissions utiliser une LIKEopération plutôt qu’une INopération ou une =opération.

Rechercher les métadonnées de publication dans la zone d'administration de WordPress

Certaines des choses qu’il est important de savoir avant de lire le reste de cet article incluent:

En fin de compte, nous allons devoir utiliser deux crochets avec deux fonctions personnalisées. Et parce que je ne peux pas fournir un exemple complet de ce à quoi cela peut ressembler dans votre cas d’utilisation, le code doit être un peu généralisé.

Se connecter à la recherche

Dans l’essentiel suivant, vous allez voir trois choses :

  1. Vérification que l’utilisateur se trouve dans la zone d’administration et qu’il se trouve sur la page d’édition.
  2. L’utilisateur a entré une recherche.
  3. La phrase de recherche a été convertie en un tableau, échappée et ajoutée à la propriété de méta-requête de l’instance de WP_Query.

Voir ci-dessous :

<?php
add_filter('pre_get_posts', function ($query) {

    // Make sure we're in the admin, an administrator, and on the edit page.
    if (!is_admin() || !current_user_can('manage_options') || 'edit' !== get_current_screen()->base) {
        return;
    }

    // Determine if the user is running a search.
    $search = filter_input(INPUT_GET, 's', FILTER_SANITIZE_STRING);
    if (empty($search)) {
        return;
    }

    $query->set(
        'meta_query',
        [
            [
                'key'     => 'headline_notes',
                'value'   => esc_sql(preg_replace('/s+?/', '%', $search)), // For flexible search, make sure to replace all white space with % for LIKE.
                'compare' => 'LIKE',
            ],
        ]
    );
});

En supposant que tout ce qui précède est vrai, cela mettra à jour la requête exécutée sur la base de données WordPress avant le rendu de la page suivante afin que les résultats incluent les informations de métadonnées.

Mise à jour de la clause WHERE

Avant de terminer, cependant, nous devons également nous assurer que nous avons mis à jour la requête en cours d’exécution.

Par défaut, la requête est construite à l’aide d’une ANDopération et cela nous empêche de parcourir correctement les titres, les extraits, le contenu et les métadonnées des articles ; cependant, la requête doit être mise à jour afin qu’elle utilise une ORopération.

Littéralement, cela signifie qu’il cherchera dans le titre, le contenu, l’extrait ou les métadonnées.

J’ai choisi d’utiliser une expression régulière dans mon implémentation, mais votre implémentation peut fonctionner avec le remplacement de sous-chaînes. Ainsi, il y a un peu commenté pour vous donner le plus de flexibilité.

<?php
add_filter( 'posts_where', function($where, $query) {

    // Determine if 'headline_notes' appears in the WHERE clause.
    $position = strpos($where, 'acme_meta_key');
    if (false === $position) {
        return $where;
    }

    // Look for the 'AND' clasue and replace it with 'OR' in the WHERE clause.
    $regularExpress = '//mi'; // Your regular expression.
    $replacement = ''; // Your string to replace.

    return preg_replace(
        $regularExpression,
        $replacement,
        $where
    );
}, 10, 2);

Cela met à jour la WHEREclause qui est déclenchée pour terminer l’ensemble de travail dans la partie initiale de l’article où nous ajoutons des métadonnées.

Il existe d’autres moyens

Notez qu’il existe des moyens incroyablement flexibles de travailler avec WP_Query pour obtenir les résultats dont vous avez besoin. Et votre implémentation variera en fonction de ce que vous faites.

Considérez donc ceci comme l’une des nombreuses façons qui peuvent être utilisées; cependant, sachez que si vous avez :

  1. une seule clé,
  2. une valeur (ou une valeur pouvant être découpée dans un tableau),
  3. et vous souhaitez rechercher des métadonnées à côté du contenu de la publication traditionnelle

Alors cela fonctionnera.

Source d’enregistrement: tommcfarlin.com

This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish. Accept Read More