按字母顺序的帖子标题/内容搜索中的SQL查询不起作用

时间:2012-06-19 作者:Paul Dumitru

我有一个使用wp\\u ajax的ajax请求,发送一个名为“q”的变量。我想做的是,在脚本得到请求后,查看数据库,获取相应帖子的标题和id,这些帖子的标题或内容与变量“类似”,换句话说,这是我的代码:

global $wpdb;
$q = $_REQUEST[\'q\'];
$sql = "SELECT * FROM wp_posts WHERE post_type = \'question\' AND post_status = \'publish\' 
            AND post_title LIKE %s OR post_content LIKE %s";
$posts = $wpdb->get_results($wpdb->prepare($sql,like_escape($q),like_escape($q)));

            echo \'<ul>\';
                foreach($posts as $post){
                    echo \'<li><a href="\'.get_permalink($post->ID).\'">\'.$post->post_title.\'</a></li>\';
                }
            echo \'</ul>\'; 
现在我有以下帖子:test test 2Lorem lipsum。。。Lorem lipsum。。。

当我键入“te”时,它应该会得到所有帖子,因为所有帖子的标题中都包含“te”,但我什么也没有得到

在键入“tes”时,应该会得到两个“test”,但我又一次什么也没有得到,所以其中一个,但如果我键入完整的单词“test”,它会给我两个“test”贴子,另一个根本不起作用。

你能给我一些建议吗?越来越烦了。。。

/编辑/

我做了以下更改:

$posts = $wpdb->get_results($wpdb->prepare($sql,\'%\'.like_escape($q).\'%\',\'%\'.like_escape($q).\'%\'));
现在发生的事情是,我从db it seams获取所有帖子,就像它忽略了post\\u type和post\\u status子句一样

你好,保罗。

1 个回复
最合适的回答,由SO网友:Rutwick Gangurde 整理而成

伙计,不需要SQL混乱!WP允许您使用search parameter.

因此,请使用此解决方案。。。

global $wpdb;
$q = $_REQUEST[\'q\'];
$posts = get_posts(array(\'s\' => $q, \'post_type\' => \'question\', \'posts_per_page\' => -1));

echo \'<ul>\';
foreach($posts as $post){
    echo \'<li><a href="\'.get_permalink($post->ID).\'">\'.$post->post_title.\'</a></li>\';
}
echo \'</ul>\';
将其放入AJAX处理程序函数中。它会起作用的!

相关推荐

如何像使用wpdb一样使用MySQL?

根据标题,我需要使用LIKE操作符以编程方式使用$wpdb删除db上的一行。我想使用$wpdb->delete 消除发生的情况,但我不知道如何设置LIKE 操作员,因为在WHERE 它需要一个指定单个值或另一个数组的数组。我问你这个语法是否正确。$wpdb->delete(\'wp_posts\', array(\'post_type\' => \'flamingo_inbound\', \'post_content\' => \'%\'.$mail.\'%\'));提前感谢