通过新的wpdb更改数据库后使用wp_query

Bru*_*ues 5 mysql wordpress

我试图使用wordpress从其他数据库访问自定义帖子.为此,我更改了当前的$wpdb全局变量:

$wpdb = new wpdb( $user, $pass, $db, $host );
$wpdb->show_errors();
Run Code Online (Sandbox Code Playgroud)

这没有显示任何错误,但是当我尝试使用时WP_Query:

$args = array('post_type'=>'produtos');
$newloop = new WP_Query($args);    
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

WordPress数据库错误:[您的SQL语法有错误; 查看与您的MySQL服务器版本对应的手册,以便在'FROM WHERE 1 = 1 AND .post_type ='produtos'AND(.post_status ='发布'或.'在第1行)附近使用正确的语法

SELECT SQL_CALC_FOUND_ROWS .ID FROM WHERE 1 = 1 AND .post_type ='produtos'AND(.post_status ='publish'OR .post_author = 1 AND .post_status ='private')ORDER BY .post_date DESC LIMIT 0,10


如果我使用$wpdb->get_results()$wpdb->get_var()功能,我可以实现我想要的:

$wpdb = new wpdb( $user, $pass, $db, $host );
$rows = $wpdb->get_results("SELECT * FROM wp_posts where post_type='produtos' AND post_status='publish'");
foreach ($rows as $produto) {
   $id = $produto->ID;
   $title = $produto->post_title;
   $valor = $wpdb->get_var("SELECT meta_value FROM wp_postmeta WHERE meta_key = 'preco' AND post_id = $id");
   $url_id = $wpdb->get_var("SELECT meta_value from wp_postmeta where post_id = $id AND meta_key='_thumbnail_id'");
}
Run Code Online (Sandbox Code Playgroud)

我正在寻找一个优雅的解决方案来解决这个问题.

Mor*_*ews 8

$wpdb = new wpdb( $user, $pass, $db, $host );
Run Code Online (Sandbox Code Playgroud)

在创建wpdb对象之后,需要设置表名,它通过调用set_prefix() method它来设置表名.

 set_prefix( $prefix, $set_table_names = true )
Run Code Online (Sandbox Code Playgroud)

如果你检查你的SQL错误.表名是空的.默认表前缀是 'wp_'.

解:

$wpdb = new wpdb( $user, $pass, $db, $host );
$wpdb->set_prefix('wp_');

//then rest of your code..
Run Code Online (Sandbox Code Playgroud)