我试图通过使用AJAX将数据发送到数据库并返回到搜索字段来创建一个自动搜索jQuery函数。
在我的wordpress主题中,我创建了一个名为“include”的文件夹,并在其中创建了一个名为“autoSearch.php”的文件
在该文件中,我的PHP代码如下所示:
global $wpdb;
$searchQuery = mysql_escape_string($_POST[\'value\']);
$mypostids = $wpdb->get_col("SELECT ID FROM $wpdb->posts WHERE post_title LIKE \'$searchQuery\' LIMIT 5");
$args = array(\'post__in=\'.$mypostids);
$res = new WP_Query($arg);
$titles ="";
while ( $res->have_posts() ) : $res->the_post();
$titles .= get_the_title().\'<br />\';
endwhile;
echo json_encode(array("everything"=>$titles));
wp_reset_postdata();
但是,我得到了一个错误:致命错误:对非对象调用成员函数get\\u col()。
我不知道为什么会这样。提前谢谢你的帮助。
最合适的回答,由SO网友:mrwweb 整理而成
更新,回答正确:使用AJAX调用时,核心WordPress函数无法访问。正确的处理方法包括"AJAX in Plugins" 在法典上。
原始答案并没有解决问题,但将来可能会让其他人感兴趣。
这里有另一种避免直接查询DB的方法。您将替换所有代码,包括$res = ...
行:
// get search term
$search_query = mysql_escape_string($_POST[\'value\']);
// args for get_posts
$my_post_args = array( \'s\' => $search_query, \'fields\' => \'ids\' );
// get array of post IDs (see "fields" argument above)
$my_post_ids = get_posts( $my_post_args );
// now WP_Query args
$res_args = array( \'post__in=\' . $my_post_ids );
// make sure that the args parameter matches (it doesn\'t in your code snippet)
$res = new WP_Query( $res_args );
// etc...