web-dev-qa-db-fra.com

Balises de recherche dans les CPT

Je n'arrive pas à comprendre comment inclure des balises dans une recherche wordpress. Par exemple, si je recherche "Apple", j'aimerais récupérer les messages avec "Apple" dans le titre ou le contenu (fonctionnalité wordpress par défaut) ainsi que messages qui contiennent la balise 'Apple'; Lorsque j'ajoute la ligne 'tag' => $keyword dans WP_query, aucun résultat n'est obtenu pour chaque recherche.

$keyword = get_search_query();
$args = array(
    'post_type' =>  array('case_studies', 'news', 'events'),
    'post_status' => 'publish',
    's' => $keyword,
    'tag' => $keyword,
);
$query = new WP_Query($args);

Si je le supprime, les résultats sont normaux (mais sans les messages avec le mot-clé dans ses balises)

2
myol

Cela ne fonctionnerait que si le mot clé correspond exactement à la balise que vous recherchez et, malheureusement, les données de la balise ne sont pas indexées par défaut par la recherche WordPress, de sorte que cela ne donnera rien non plus. Si vous souhaitez indexer les balises et les inclure dans les résultats de la recherche, vous pouvez utiliser un plugin. Relevanassi pourrait faire l'affaire, mais si cela ne vous dérange pas de dépenser un peu, alors SearchWP le ferait certainement, car il indexe tout le contenu, y compris les balises et les champs personnalisés, et vous permet d'attribuer un poids à chacun. Vous pouvez, par exemple, attribuer le poids le plus élevé aux balises ou, si vous souhaitez uniquement rechercher des balises, attribuez simplement un poids égal à 0 à tous les autres.

1
Jason Hoffmann

Votre problème est plus que probable que vous annuliez vos résultats de recherche.

$keyword = get_search_query();

Ci-dessus, vous récupérez la variable de recherche fournie

$args = array(
    'post_type' =>  array('case_studies', 'news', 'events'),
    'post_status' => 'publish',
    's' => $keyword,
    'tag' => $keyword,
);

Ici, vous exécutez une requête qui nécessite QUE _ TOUS soient vrais

  • Le type de publication doit être étude de cas, nouvelles ou événements.
  • Le statut de la publication doit être publié (publier)
  • Le titre (ou éventuellement le contenu) doit contenir le mot clé recherché sur
  • Le message doit contenir une balise nommée exactement comme le terme de recherche.

Supprimez la déclaration s ou tag et vous obtiendrez peut-être de meilleurs résultats.

Chaque élément que vous entrez dans votre liste d'arguments WP_Query doit être vrai pour qu'un résultat soit affiché. (les sous-requêtes telles que les requêtes tax et term ont une syntaxe spéciale pour effectuer OR des requêtes de type sur leurs données)

Si vous souhaitez rechercher uniquement les publications ayant une étiquette particulière, essayez ce qui suit.

$keyword = strtolower( str_replace( array(' ','_'), '-', get_search_query() ) );
$args = array(
    'post_type' =>  array('case_studies', 'news', 'events'),
    'post_status' => 'publish',
    'tag' => $keyword,
);

Cela vous donnera une correspondance si le slug tag correspond exactement à la recherche entière.

str_to_lower est utilisé pour la recherche de balises, les slugs de balises, et non les noms et les balises de balises, sont tous en minuscules avec des tirets (la raison du str_replace, qui remplace tous les espaces et les traits de soulignement par des tirets)

Qu'essayez-vous de faire? Si vous pouvez le dire clairement dans votre question, l’un de nous peut peut-être apporter une solution au problème.

1
Privateer

C’est un cas assez inhabituel et qui peut aussi échouer et donner des résultats assez inattendus.

Par défaut, ce n'est pas du tout possible. J'ai vraiment essayé de trop penser à cela, et je ne peux pas trouver de solution qui fonctionne en utilisant simplement une requête, sauf peut-être en utilisant une requête SQL personnalisée ou les filtres fournis dans WP_Query . Malheureusement, mon SQL est toujours très mauvais, je ne peux donc pas vous aider ici. Vous devrez regarder les deux liens donnés.

Vous aurez probablement besoin de faire quelques vérifications pour vérifier si oui ou non une étiquette existe avant de l'utiliser réellement. Ici, vous pouvez utiliser term_exists pour vérifier si la balise existe.

J'ai aussi pensé à diviser la page de recherche en deux sections, la première section affichant les publications de la recherche par défaut, la requête principale. La deuxième section sera une requête personnalisée qui permettra de récupérer les publications de la balise spécifique. Ici, il vous suffirait simplement d'utiliser le paramètre tag et d'utiliser le terme de recherche comme valeur. Comme je l'ai dit précédemment, il peut être judicieux de vérifier d'abord si le tag existe réellement.

L’inconvénient ici est peut-être le double des messages, vous devrez donc peut-être vérifier cela également.

Vous pouvez vraiment jouer avec beaucoup de choses ici et ce ne sont que des idées de base que je vous ai données. N'hésitez pas à poster votre solution et à l'accepter si vous êtes capable de résoudre ceci :-)

1
Pieter Goosen