4

カスタム クエリを使用した高度な検索の作成と使用に問題があります。$wpdb->get_results($query , OBJECT);

xxx yyyy検索または検索するときのワードプレスの通常の検索では、yyyy xxx同じ結果が得られ、それは良いことです。しかし、クエリを使用して高度な検索を作成する必要がある場合、検索フィールド内の一連の単語が重要であり、それ xxx yyyy以上検索yyyy xxxすると同じ結果になりません。例を挙げて言いたい: 投稿のタイトル用と作成者用の 2 つの入力フィールドを作成します (作成者は単なる例であり、この場所はカスタム フィールドです)。これらのフィールドを読み取って、ワードプレスで検索しようとしています

<?php
$t = $_REQUEST['title'];
$a = $_REQUEST['author'];
global $wpdb;
$query = "SELECT DISTINCT wp_posts.* FROM wp_posts, wp_postmeta WHERE wp_posts.ID = wp_postmeta.post_id";

if ($t != '') {
    $t_sql = " AND wp_posts.post_title like '%$t%' ";
}

if ($a != '') {
    $a_sql = " AND wp_postmeta.meta_key = 'Author' AND wp_postmeta.meta_value like '%$a%' ";
}
$query .= $t_sql;
$query .= $a_sql;
$pageposts = $wpdb->get_results($query , OBJECT);
global $post;

if ($pageposts):
foreach ($pageposts as $post):
setup_postdata($post);
//...
endforeach;
endif;
?>

あなたの考えでは、私は何をしなければなりませんか?

4

3 に答える 3

1

実際、Web 開発者ポータルでコード、特に SQL クエリを確認しました。また、 xxx yyyyyyyy xxxを検索しても、PHP スクリプトと同じ結果にならない理由もわかりませんでした。しかし、私があなたに与えることができる唯一のヒント:

$query .= $t_sql;
$query .= $a_sql;
// is to add an sql order by keyword like this
$query .= " ORDER BY wp_posts . post_title ";

試してみる!また、サーバーの PHP がこれらの変数で実行されない場合は、変数をaddslashes()いつ使用したかを忘れないでください。これは、関数を使用して確認できます。$_GET$_POST$_COOKIEaddslashes()get_magic_quotes_gpc()

于 2013-04-09T09:00:40.813 に答える