Bonjour,
j'ai fait un petit formulaire de recherche par ingrédient pour un site de recettes. La recherche sera effectuée dans le titre et dans la liste d'ingrédients des articles.
Pour parer à beaucoup de petits problèmes, j'ai nettoyé un peu le terme recherché : tout en minuscule, suppression des " à ", " le ", " d/'", "coeur" devient "cœur"... vous voyez ce que je veux dire !
Et pour parachever le tout, ma requête utilise le comparateur PHP 'RLIKE' pour autoriser les éventuels féminin/pluriel.
Et c'est là que je rencontre un problème : si on cherche "œuf", on obtient les articles qui contiennent de l’œuf, mais aussi du bœuf !
Comment parer à ce problème ?
Est ce que je dois utiliser if/else (si $ingredient = oeuf { sois strict dans ta recherche ! }, sinon { sois plus cool }
Ou y a-t-il un autre moyen ?
Et comment dire 'sois strict dans ta recherche' ? avec '=' ?
Merci de votre coup de main,
Claire
pst: je travaille sur Wordpress, je n'utilise pas de plugin pour ça, et voici le script déjà développé :
j'ai fait un petit formulaire de recherche par ingrédient pour un site de recettes. La recherche sera effectuée dans le titre et dans la liste d'ingrédients des articles.
Pour parer à beaucoup de petits problèmes, j'ai nettoyé un peu le terme recherché : tout en minuscule, suppression des " à ", " le ", " d/'", "coeur" devient "cœur"... vous voyez ce que je veux dire !
Et pour parachever le tout, ma requête utilise le comparateur PHP 'RLIKE' pour autoriser les éventuels féminin/pluriel.
Et c'est là que je rencontre un problème : si on cherche "œuf", on obtient les articles qui contiennent de l’œuf, mais aussi du bœuf !
Comment parer à ce problème ?
Est ce que je dois utiliser if/else (si $ingredient = oeuf { sois strict dans ta recherche ! }, sinon { sois plus cool }
Ou y a-t-il un autre moyen ?
Et comment dire 'sois strict dans ta recherche' ? avec '=' ?
Merci de votre coup de main,
Claire
pst: je travaille sur Wordpress, je n'utilise pas de plugin pour ça, et voici le script déjà développé :
<?php
// si il y a une valeur au champ de recherche :
if(isset($_POST['ingredient'])){
// nettoyage et formatage de la valeur envoyée
$ingredient = $_POST['ingredient'];
$ingredient = filter_var($ingredient, FILTER_SANITIZE_STRING, FILTER_FLAG_NO_ENCODE_QUOTES);
$ingredient = strtolower($ingredient);
$ingredient = str_replace(" d\'", "|", $ingredient);
$ingredient = str_replace(" de ", "|", $ingredient);
$ingredient = str_replace(" en ", "|", $ingredient);
$ingredient = str_replace(" au ", "|", $ingredient);
$ingredient = str_replace(" à ", "|", $ingredient);
$ingredient = str_replace(" le ", "|", $ingredient);
$ingredient = str_replace(" la ", "|", $ingredient);
$ingredient = str_replace(" ", "|", $ingredient);
$ingredient = str_replace("oeuf", "œuf", $ingredient);
$ingredient = str_replace("coeur", "cœur", $ingredient);
$ingredient = str_replace("boeuf", "bœuf", $ingredient);
// Rédaction du tableau des arguments de la nouvelle query QuerySearch
$paged = ( get_query_var('page') ) ? get_query_var('page') : 1;
$args = array(
'post_type' => 'recette', //recherche dans les articles custom post type "Recette"
'posts_per_page' => 100, //limitation de résultat par page
'paged' => $paged, //rendre possible la navigation page 1 page 2 ect dans les résultats de recherche
'key' => array( 'Ingredient', 'title' ),//recherche dans le titre de l'article et dans le custom field "Ingredient"
'meta_value' => $ingredient, //le terme à rechercher
'meta_compare' => 'RLIKE', //le terme doit apparaitre mais pas forcément exactement (pluriel, féminin... ex: pain/pains, piquant/piquante ect... )
);
// QuerySearch
$QuerySearch = new WP_Query( $args );
?>