2013-09-24 31 views
5

Tôi đang cố gắng truy cập các bài đăng tùy chỉnh từ cơ sở dữ liệu khác bằng cách sử dụng wordpress. Để làm điều này tôi đã thay đổi hiện hành $wpdb biến toàn cầu:Sử dụng wp_query sau khi thay đổi cơ sở dữ liệu qua wpdb mới

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

này không hiển thị bất kỳ lỗi nào, nhưng khi tôi cố gắng sử dụng WP_Query:

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

tôi nhận được lỗi sau:

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


Nếu tôi sử dụng $wpdb->get_results()$wpdb->get_var() f unctions Tôi có thể đạt được những gì tôi muốn:

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

Tôi đang tìm một giải pháp thanh lịch cho vấn đề này.

+0

Tại sao bạn sẽ ghi đè lên '$ wpdb'? Chính xác thì bạn đang cố đạt được điều gì? Bức tranh lớn hơn, điều gì làm cho nó cần thiết? –

+0

Tôi muốn sử dụng loại bài đăng 'produtos' từ trang web chính trong trang web trên thiết bị di động (tên miền phụ có cài đặt wordpress riêng). Tôi đã đọc trong [thread] này (http://wordpress.stackexchange.com/questions/100666/how-can-i-connect-to-another-wp-database-and-use-wp-query) mà tôi nên ghi đè $ wpdb vì WP_Query sử dụng nó. –

+0

Tôi không chắc chắn nhưng cả hai wordpress của bạn là cùng một phiên bản –

Trả lời

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

sau khi tạo đối tượng wpdb, bạn cần phải đặt tên bảng, nó được thực hiện bằng cách gọi set_prefix() method nó sẽ thiết lập tên bảng.

set_prefix($prefix, $set_table_names = true) 

nếu bạn kiểm tra lỗi sql của mình. các tên bảng trống. Tiền tố bảng mặc định là 'wp_'.

giải pháp:

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

//then rest of your code.. 
+1

tránh các nhận xét như cảm ơn. tốt, sau khoảng 5 giờ liên tiếp chiến đấu này đã giải quyết được vấn đề của tôi .. cảm ơn, vì vậy rất nhiều! – gray

+0

Điều này không hiệu quả đối với tôi! Cả hai cơ sở dữ liệu trên cùng một máy chủ nhưng vẫn không hoạt động! Bất kỳ đề xuất, btw, sử dụng chính xác cùng một mã. –

+0

tốt hơn nên đăng câu hỏi mới, với mã của bạn – MortalViews

Các vấn đề liên quan