{"id":231765,"date":"2023-01-01T16:47:00","date_gmt":"2023-01-01T13:47:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231765"},"modified":"2022-12-25T21:57:29","modified_gmt":"2022-12-25T18:57:29","slug":"rechercher-les-metadonnees-de-publication-dans-la-zone-dadministration-de-wordpress","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fr\/rechercher-les-metadonnees-de-publication-dans-la-zone-dadministration-de-wordpress\/","title":{"rendered":"Rechercher les m\u00e9tadonn\u00e9es de publication dans la zone d&rsquo;administration de WordPress"},"content":{"rendered":"\n<p>Apr\u00e8s avoir travaill\u00e9 avec WordPress pendant une p\u00e9riode prolong\u00e9e, il est probable que vous ayez travaill\u00e9 avec des m\u00e9tadonn\u00e9es de publication dans une certaine mesure. Peut-\u00eatre avez-vous simplement lu les m\u00e9tadonn\u00e9es de la base de donn\u00e9es, ou peut-\u00eatre avez-vous \u00e9galement \u00e9crit et lu dans la table de la base de donn\u00e9es.<\/p>\n<p>Il peut s&rsquo;agir d&rsquo;une API tr\u00e8s puissante chaque fois que vous avez besoin d&rsquo;associer certaines informations \u00e0 vos publications (ou, si vous aimez encore plus abstraire les choses, \u00e0 vos mod\u00e8les).<\/p>\n<p>Cela dit, que se passe-t-il lorsque vous souhaitez inclure des informations de la table de m\u00e9tadonn\u00e9es mais que vous n&rsquo;avez pas la commodit\u00e9 de plugins tels que <a href=\"https:\/\/searchwp.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">SearchWP<\/a> ou <a href=\"https:\/\/www.relevanssi.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Relevanssi<\/a>? <\/p>\n<p>De plus, supposons que le cas d&rsquo;utilisation concerne uniquement les administrateurs et uniquement la zone d&rsquo;administration de WordPress. Autrement dit, vous souhaitez rechercher vos publications \u00e0 partir de l&rsquo; \u00e9cran <strong>Toutes les publications<\/strong>, mais vous souhaitez \u00e9galement inclure les m\u00e9tadonn\u00e9es de la publication dans les crit\u00e8res de recherche.<\/p>\n<p>Quoi alors ?<\/p>\n<h2>Recherche de m\u00e9tadonn\u00e9es de publication<\/h2>\n<p>Par d\u00e9faut, chaque fois que vous recherchez des articles dans la zone d&rsquo;administration de WordPress, il recherche une phrase dans le titre de l&rsquo;article, l&rsquo;extrait de l&rsquo;article et le contenu de l&rsquo;article, puis renvoie ces r\u00e9sultats.<\/p>\n<p>Donc, pour \u00e9tendre la recherche afin d&rsquo;inclure les m\u00e9tadonn\u00e9es de publication, nous devons mettre \u00e0 jour la requ\u00eate ex\u00e9cut\u00e9e de sorte qu&rsquo;elle int\u00e8gre les tables de m\u00e9tadonn\u00e9es de publication. Mais il y a plus que cela. Plus pr\u00e9cis\u00e9ment, pour une flexibilit\u00e9 maximale et une exp\u00e9rience utilisateur optimale, vous souhaiterez\u00a0:<\/p>\n<ul>\n<li>inclure des parties d&rsquo;une phrase afin qu&rsquo;il ne se contente pas de rechercher quelque chose textuellement dans l&rsquo;article,<\/li>\n<li>et, bien s\u00fbr, g\u00e9rez correctement le cas o\u00f9 aucun terme de recherche n&rsquo;est entr\u00e9 afin que l&rsquo; \u00e9cran <strong>Tous les messages<\/strong> puisse toujours \u00eatre affich\u00e9 dans son format standard.<\/li>\n<\/ul>\n<p>Cela signifie que nous n&rsquo;avons pas seulement besoin de modifier la requ\u00eate de recherche pour inclure une m\u00e9ta-cl\u00e9 et une m\u00e9ta-valeur, mais nous devons \u00e9galement \u00e9chapper correctement des phrases enti\u00e8res afin que nous puissions utiliser une <code>LIKE<\/code>op\u00e9ration plut\u00f4t qu&rsquo;une <code>IN<\/code>op\u00e9ration ou une <code>=<\/code>op\u00e9ration.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-159257-61e6f01916b5c.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-159257-61e6f01916b5c.png\" alt=\"Rechercher les m\u00e9tadonn\u00e9es de publication dans la zone d&#039;administration de WordPress\" ><\/a><\/p>\n<p>Certaines des choses qu&rsquo;il est important de savoir avant de lire le reste de cet article incluent:<\/p>\n<ul>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/classes\/wp_query\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">WP_Query<\/a><\/li>\n<li>Le crochet <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/posts_where\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">posts_where<\/a><\/li>\n<li>Le crochet <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/pre_get_posts\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">pre_get_posts<\/a><\/li>\n<li>Expressions r\u00e9guli\u00e8res avec <a href=\"https:\/\/www.php.net\/manual\/en\/function.preg-replace.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">preg_replace<\/a><\/li>\n<li>Fonctions d&rsquo;assistance WordPress, \u00e0 savoir <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/esc_sql\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">esc_sql<\/a>.<\/li>\n<\/ul>\n<p>En fin de compte, nous allons devoir utiliser deux crochets avec deux fonctions personnalis\u00e9es. Et parce que je ne peux pas fournir un exemple complet de ce \u00e0 quoi cela peut ressembler dans votre cas d&rsquo;utilisation, le code doit \u00eatre un peu g\u00e9n\u00e9ralis\u00e9.<\/p>\n<h3>Se connecter \u00e0 la recherche<\/h3>\n<p>Dans l&rsquo;essentiel suivant, vous allez voir trois choses\u00a0:<\/p>\n<ol>\n<li>V\u00e9rification que l&rsquo;utilisateur se trouve dans la zone d&rsquo;administration et qu&rsquo;il se trouve sur la page d&rsquo;\u00e9dition.<\/li>\n<li>L&rsquo;utilisateur a entr\u00e9 une recherche.<\/li>\n<li>La phrase de recherche a \u00e9t\u00e9 convertie en un tableau, \u00e9chapp\u00e9e et ajout\u00e9e \u00e0 la propri\u00e9t\u00e9 de m\u00e9ta-requ\u00eate de l&rsquo;instance de WP_Query.<\/li>\n<\/ol>\n<p><a href=\"https:\/\/gist.github.com\/tommcfarlin\/4f2fa607bf002f52a7a8d1e08f75d86a#file-00-pre-get-posts-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Voir ci-dessous<\/a> :<\/p>\n<pre><code>&lt;?php\nadd_filter('pre_get_posts', function ($query) {\n\n    \/\/ Make sure we're in the admin, an administrator, and on the edit page.\n    if (!is_admin() || !current_user_can('manage_options') || 'edit' !== get_current_screen()-&gt;base) {\n        return;\n    }\n\n    \/\/ Determine if the user is running a search.\n    $search = filter_input(INPUT_GET, 's', FILTER_SANITIZE_STRING);\n    if (empty($search)) {\n        return;\n    }\n\n    $query-&gt;set(\n        'meta_query',\n        [\n            [\n                'key'     =&gt; 'headline_notes',\n                'value'   =&gt; esc_sql(preg_replace('\/s+?\/', '%', $search)), \/\/ For flexible search, make sure to replace all white space with % for LIKE.\n                'compare' =&gt; 'LIKE',\n            ],\n        ]\n    );\n});<\/code><\/pre>\n<p>En supposant que tout ce qui pr\u00e9c\u00e8de est vrai, cela mettra \u00e0 jour la requ\u00eate ex\u00e9cut\u00e9e sur la base de donn\u00e9es WordPress avant le rendu de la page suivante afin que les r\u00e9sultats incluent les informations de m\u00e9tadonn\u00e9es.<\/p>\n<h3>Mise \u00e0 jour de la clause WHERE<\/h3>\n<p>Avant de terminer, cependant, nous devons \u00e9galement nous assurer que nous avons mis \u00e0 jour la requ\u00eate en cours d&rsquo;ex\u00e9cution.<\/p>\n<p>Par d\u00e9faut, la requ\u00eate est construite \u00e0 l&rsquo;aide d&rsquo;une <code>AND<\/code>op\u00e9ration et cela nous emp\u00eache de parcourir correctement les titres, les extraits, le contenu et les m\u00e9tadonn\u00e9es des articles\u00a0; cependant, la requ\u00eate doit \u00eatre mise \u00e0 jour afin qu&rsquo;elle utilise une <code>OR<\/code>op\u00e9ration.<\/p>\n<p>Litt\u00e9ralement, cela signifie qu&rsquo;il cherchera dans le titre, le contenu, l&rsquo;extrait ou les m\u00e9tadonn\u00e9es.<\/p>\n<p>J&rsquo;ai choisi d&rsquo;utiliser une expression r\u00e9guli\u00e8re dans mon impl\u00e9mentation, mais votre impl\u00e9mentation peut fonctionner avec le remplacement de sous-cha\u00eenes. Ainsi, il y a un peu comment\u00e9 pour <a href=\"https:\/\/gist.github.com\/tommcfarlin\/4f2fa607bf002f52a7a8d1e08f75d86a#file-01-posts-where-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">vous donner le plus de flexibilit\u00e9<\/a>.<\/p>\n<pre><code>&lt;?php\nadd_filter( 'posts_where', function($where, $query) {\n\n    \/\/ Determine if 'headline_notes' appears in the WHERE clause.\n    $position = strpos($where, 'acme_meta_key');\n    if (false === $position) {\n        return $where;\n    }\n\n    \/\/ Look for the 'AND' clasue and replace it with 'OR' in the WHERE clause.\n    $regularExpress = '\/\/mi'; \/\/ Your regular expression.\n    $replacement = ''; \/\/ Your string to replace.\n\n    return preg_replace(\n        $regularExpression,\n        $replacement,\n        $where\n    );\n}, 10, 2);<\/code><\/pre>\n<p>Cela met \u00e0 jour la <code>WHERE<\/code>clause qui est d\u00e9clench\u00e9e pour terminer l&rsquo;ensemble de travail dans la partie initiale de l&rsquo;article o\u00f9 nous ajoutons des m\u00e9tadonn\u00e9es.<\/p>\n<h2>Il existe d&rsquo;autres moyens<\/h2>\n<p>Notez qu&rsquo;il existe des moyens incroyablement flexibles de travailler avec WP_Query pour obtenir les r\u00e9sultats dont vous avez besoin. Et votre impl\u00e9mentation variera en fonction de ce que vous faites.<\/p>\n<p>Consid\u00e9rez donc ceci comme l&rsquo;une des nombreuses fa\u00e7ons qui peuvent \u00eatre utilis\u00e9es; cependant, sachez que si vous avez :<\/p>\n<ol>\n<li>une seule cl\u00e9,<\/li>\n<li>une valeur (ou une valeur pouvant \u00eatre d\u00e9coup\u00e9e dans un tableau),<\/li>\n<li>et vous souhaitez rechercher des m\u00e9tadonn\u00e9es \u00e0 c\u00f4t\u00e9 du contenu de la publication traditionnelle<\/li>\n<\/ol>\n<p>Alors cela fonctionnera.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Source d&rsquo;enregistrement:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Voici comment \u00e9tendre la recherche pour inclure les m\u00e9tadonn\u00e9es de publication, nous devons mettre \u00e0 jour la requ\u00eate qui est ex\u00e9cut\u00e9e de sorte qu&rsquo;elle int\u00e8gre les tables de m\u00e9tadonn\u00e9es de publication.<\/p>\n","protected":false},"author":1,"featured_media":236453,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[915,893,717,832,801,841,862],"tags":[1167],"class_list":["post-231765","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-autre","category-code-2","category-developpeur","category-guide-pour-les-debutants","category-php-3","category-tutoriels","category-wordpress-3","tag-affiai-fr"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/231765","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/comments?post=231765"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/231765\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media\/236453"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media?parent=231765"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/categories?post=231765"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/tags?post=231765"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}