正在使用$wpdb复制WP_Query“%s”参数

时间:2017-10-31 作者:somebodysomewhere

进行以下基本查询:

$posts = new WP_Query(array(
    \'post_type\' => \'page\'
    \'s\' => \'some search query\'
));
WordPress将拆分some search query 分为3个单独的搜索词,这就是为什么我需要使用这个$wpdb函数。我想要相同的功能,但将整个查询视为一个搜索词。

这就是我所处的位置:

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\'
                                    ");
这是我有史以来第一次进行内部连接,所以可能完全错了。要修复此查询,需要做两件事:

修复内部联接行中的语法,在WHERE 子句(应类似于AND term_taxonomy_id = 2, 对吧?)。我使用的是Polylang,所以我只需要检查object_id 存在于中term_relationships 具有值的表2.

2 个回复
最合适的回答,由SO网友:trevbro 整理而成

似乎你在你的内心加入,你正在加入

wp_term_relationships.object_id == wp_posts.post_title
这是错误的,因为object_id 是本例场景中的帖子id。

我想要所有ID(post ID)

SELECT ID FROM $wpdb->posts
wp\\u term\\u relationships表中有记录的人

// Now we are comparing the correct columns
INNER JOIN $wpdb->term_relationships ON $wpdb->term_relationships.object_id = $wpdb->posts.ID 
添加附加where子句

其中,term\\u taxonomy\\u id等于2

WHERE $wpdb->term_relationships.term_taxonomy_id = 2

SO网友:birgire

WordPress将一些搜索查询拆分为3个单独的搜索词,这就是为什么我需要使用这个$wpdb函数。我想要相同的功能,但将整个查询视为一个搜索词。

这里有sentenceexact 输入搜索参数WP_Query.

不要自己手动构建搜索查询,请尝试以下操作:。

$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\')
使用exactfalse, 它将更改为:

(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%\')
希望有帮助!

结束