この基本的な質問をしてください:
$posts = new WP_Query(array(
'post_type' => 'page'
's' => 'some search query'
));
WordPressはsome search query
を3つの別々の検索語に分割します、それで私はこの$ wpdb関数を作る必要があります。私は同じ機能が欲しいのですが、クエリ全体を1つの検索語として扱います。
これが私がいるところです。
global $wpdb;
$post_type = 'product';
$db_matches = $wpdb->get_results("
SELECT ID
FROM $wpdb->posts
INNER JOIN $wpdb->term_relationships ON $wpdb->term_relationships.object_id = $wpdb->posts.post_title
WHERE post_title LIKE '%$query%'
AND post_type = '$post_type'
AND post_status = 'publish'
");
これは私にとって初めての内部結合なので、おそらく間違いです。このクエリを修正するには、2つのことを行う必要があります。
WHERE
句に言語フィルタを追加します(AND term_taxonomy_id = 2
のようなものにするべきですよね?)。私はPolylangを使用しているので、object_id
がterm_relationships
テーブルに存在し、値2
を持つことを確認する必要があります。それで、だれでも私にこれで手を貸すことができますか?どうもありがとう。
あなたはあなたのINNER JOINにあなたが参加しているようです
wp_term_relationships.object_id == wp_posts.post_title
この場合、object_idがpost-idであるため、これは誤りです。
すべてのIDが必要です(ポストID)
SELECT ID FROM $wpdb->posts
wp_term_relationshipsテーブルにレコードがある人
// Now we are comparing the correct columns
INNER JOIN $wpdb->term_relationships ON $wpdb->term_relationships.object_id = $wpdb->posts.ID
追加のwhere句を追加する
term_taxonomy_idが2に等しい場合
WHERE $wpdb->term_relationships.term_taxonomy_id = 2
WordPressはいくつかの検索クエリを3つの別々の検索語に分割します。そのため、この$ wpdb関数を作成する必要があります。私は同じ機能が欲しいのですが、クエリ全体を1つの検索語として扱います。
WP_Query
にはsentence
およびexact
入力検索パラメーターがあります。
手動で検索クエリを手動で作成するのではなく、.
$query = new WP_Query( [
'post_type' => 'page',
's' => 'some search query',
'sentence' => true,
'exact' => true,
] );
生成されたSQLクエリには、次のものが含まれます。
(wp_posts.post_title LIKE 'some search query') OR
(wp_posts.post_excerpt LIKE 'some search query') OR
(wp_posts.post_content LIKE 'some search query')
exact
をfalse
とすると、次のようになります。
(wp_posts.post_title LIKE '%some search query%') OR
(wp_posts.post_excerpt LIKE '%some search query%') OR
(wp_posts.post_content LIKE '%some search query%')
それが役に立てば幸い!