web-dev-qa-db-fra.com

Page de recherche personnalisée et recherche par titre, contenu et tag

Quelqu'un peut-il réviser mon code, j'ai besoin de connaître de meilleures solutions ou n'importe quel bogue.

Okey! , J’ai créé un fichier PHP pour obtenir les résultats de la recherche par paramètres et par titre, contenu et balise

La tête de PHP ressemble à:

include('../../../../wp-config.php');
header('Content-type:text/html;charset=utf-8');
$keyword = $_GET['k'];

Que j’apporterai les résultats de recherche par jQuery après.

Ma fonction de recherche principale pour afficher le résultat de la base de données:

function search($keyword,$mark){
    while($data=mysql_fetch_array($keyword)){
        if($data['post_status']=='publish'){
            echo '<li>#'.$data['ID'].' '.htmlentities($data['post_title']).' ('.$mark.')</li>';
        }
    }
} 

Recherche par fonction de titre: Mot-clé complet (ex: "Jack Daniels")

$sql_full_keyword       = "SELECT * from wp_posts WHERE post_title LIKE '$keyword%'";
$search_full_keyword    = mysql_query($sql_full_keyword) or die(mysql_error());
search($search_full_keyword,"Full keyword(s) = '$keyword'");

Donc, j'ai divisé le mot clé pour les prochaines étapes comme:

$keywords_split         = explode(" ",$keyword);

Recherche par fonction de titre: mots-clés multiples (ex: jack + daniels)

for($i=0;$i<count($keywords_split);$i++){
    $sql_split_keyword      = "SELECT * from wp_posts WHERE post_title LIKE '$keywords_split[$i]%'";
    $search_split_keyword   = mysql_query($sql_split_keyword) or die(mysql_error());
    search($search_split_keyword,"Split keyword = '$keywords_split[$i]'");
}

Fonction de recherche par contenu: (idem ci-dessus, mais recherche par contenu)

for($i=0;$i<count($keywords_split);$i++){
    $sql_split_keyword      = "SELECT * from wp_posts WHERE post_content LIKE '$keywords_split[$i]%'";
    $search_split_keyword   = mysql_query($sql_split_keyword) or die(mysql_error());
    search($search_split_keyword,"Split keyword = '$keywords_split[$i]' (Content)");
}

Que fermer mysql

mysql_close();

Fonction de recherche par balise: (en utilisant une requête wordpress normale)

    $tags = str_replace(" ","-",$keyword).",".str_replace(" ",",",$keyword);
    query_posts(array('post_type'=>array('one','two','three') ,'tag' => $tags,'posts_per_page'=>-1));

    while (have_posts()):the_post();
    echo '<li>#'.get_the_ID().' '.get_the_title().'</li>';
    endwhile;

Tout fonctionne maintenant et j'ai besoin de quelqu'un pour réviser mon code, me dire de meilleures choses ou tong ...

Code complet ici: http://snipt.org/zpz0

Merci

1
l2aelba

La recherche dans WordPress est compliquée car:

  1. WP ne le fait pas très bien hors de la boîte
  2. Les gens ont tendance à avoir des attentes variées quant à la précision de la recherche
  3. Même les exigences légères (du point de vue humain) en matière de recherche ont tendance à se traduire par un code compliqué et complexe

Construire la recherche à partir de zéro est impliqué (je sais parce que je l'ai fait exactement pendant un certain temps pour les clients) et vous devez tout d'abord rechercher des plugins de recherche ou d'autres compromis (comme une recherche en tant que service).

Pour énumérer brièvement des problèmes spécifiques liés à votre code:

3
Rarst