我有一个使用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子句一样
你好,保罗。
最合适的回答,由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处理程序函数中。它会起作用的!