2013-09-24 28 views
5

我試圖從其他數據庫使用wordpress訪問自定義帖子。要做到這一點,我已經改變了當前$wpdb全局變量:通過新的wpdb更改數據庫後使用wp_query

$wpdb = new wpdb($user, $pass, $db, $host); 
$wpdb->show_errors(); 

這並不顯示任何錯誤,但是當我嘗試使用WP_Query

$args = array('post_type'=>'produtos'); 
$newloop = new WP_Query($args);  

我得到以下錯誤:

WordPress database error: [You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM WHERE 1=1 AND .post_type = 'produtos' AND (.post_status = 'publish' OR .' at line 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()˚F我可以達到我想要的:

$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'"); 
} 

我正在尋找一個優雅的解決方案來解決這個問題。

+0

你爲什麼會覆蓋'$ wpdb'?你究竟想要達到什麼目的?什麼是更大的圖片,這使得它有必要? –

+0

我想在移動網站的主網站(使用自己的wordpress安裝子域)中使用帖子類型'produtos'。 我在這[線程](http://wordpress.stackexchange.com/questions/100666/how-can-i-connect-to-another-wp-database-and-use-wp-query)閱讀,我應該覆蓋$ wpdb,因爲WP_Query使用它。 –

+0

我不確定,但你的兩個wordpress是相同的版本 –

回答

8
$wpdb = new wpdb($user, $pass, $db, $host); 

創建對象WPDB後,您需要設置表名稱,它是通過調用set_prefix() method將設置表名完成。

set_prefix($prefix, $set_table_names = true) 

如果你檢查你的sql錯誤。表名是空的。默認表前綴是'wp_'

解決方案:

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

//then rest of your code.. 
+1

避免評論,如謝謝。好吧,經過大約5個小時的戰鬥,這已經解決了我的問題..謝謝,太好了! – gray

+0

這不適合我!兩個數據庫都在同一臺服務器上,但仍然無法使用!任何建議,順便說一句,使用完全相同的代碼。 –

+0

最好用你的代碼發佈一個新問題 – MortalViews

相關問題