私はウェブサイト上の特定のタイプの投稿のためにPHP検索機能を構築してきました(この目的のために、mySQLは問題外であることを受け入れてください)。
一連の手順の後、タイトルと各投稿のタグを取得し、と呼ばれる変数に格納します$full
。
検索語は、という変数に含まれます$terms
$full = $title . ' ' . $tago[$result->ID];
どちらも小文字に変換されます。
$full
次に、使用する際に類似した単語を探します$terms
これを試してみました。
$final = strpos($full,$terms);
それは機能しますが、私が必要とするほどではありません。
- これは、タイトルとタグの類似した単語と一致しますが、スペースはまったく処理しません。タイトルとタグからスペースとカンマを削除してみましたが、役に立ちませんでした。
- ユーザーが1つではなく2つのタグで構成されている誰かの名前を入力した場合、結果は見つかりません。
- 複数の単語はもちろん、複数の用語を処理することはできません。どちらも私が望んでいることです。
役立つ場合は、ここに完全なスクリプトがあります
$proto = $_GET['p'];
$terms = $_GET['s'];
$terms = strtolower($terms);
$terms = str_replace(' ', '', $terms);
$ids = array();
if($proto == 'inline') {
$search = get_posts('post_type=post&post_status=publish');
foreach($search as $result) {
$title = get_the_title($result);
$tags = wp_get_post_tags( $result->ID);
foreach($tags as $tag){ $tago[$result->ID].= $tag->name;}
$full = $title . ' ' . $tago[$result->ID];
$full = strtolower($full);
$final = strpos($full,$terms);
if($final != false){
$ids[] = $result->ID;
}
}
if ($ids[0] == '') {
echo '<div align="center" style="text-align:center; color:#FFF;">No Results Found</div>';
return false; } else {
$args = array( 'post__in' => $ids );
$srs = get_posts($args);
foreach($srs as $sr) {
echo '<a href="'.$sr->post_slug.'"><img src=""/><b>'.$sr->post_title.'</b>'. $tago[$result->ID].'<span>'.date('dS M Y', strtotime($sr->post_date)).'</span></a>';
}
}
}
その価値
$ termsには、「赤い車」などの検索のためにユーザーが入力した値が含まれている場合があります。
$ fullには、投稿のタイトルとタグが含まれているため、次のように表示されます。「赤いvaxhaulはあまり良くない、車、車、恐ろしい、醜い」
その場合、それが見つかるはずです。