2013-09-24 13 views
5

Próbuję uzyskać dostęp do niestandardowych wpisów z innych baz danych za pomocą wordpress. Aby to zrobić, mam zmieniony bieżący $wpdb zmienną globalną:Użyj wp_query po zmianie bazy danych za pomocą nowego wpdb

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

nie wykazuje żadnych błędów, ale gdy próbuję użyć WP_Query:

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

pojawia się następujący błąd:

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


przypadku użyć $wpdb->get_results() i $wpdb->get_var() f można osiągnąć to, co chcę:

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

Szukam eleganckiego rozwiązania tego problemu.

+0

Dlaczego chcesz nadpisać '$ wpdb'? Co dokładnie próbujesz osiągnąć? Jaki jest większy obraz, który sprawia, że ​​jest to konieczne? –

+0

Chcę użyć typu "produtos" z głównej strony na stronie mobilnej (subdomena z własną instalacją wordpress). Przeczytałem w tym [wątku] (http://wordpress.stackexchange.com/questions/100666/how-can-i-connect-to-another-wp-database-and-use-wp-query), który powinien nadpisać $ wpdb, ponieważ używa go WP_Query. –

+0

Nie jestem pewien, ale twoja obie wordpress jest ta sama wersja –

Odpowiedz

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

po utworzeniu obiektu wpdb, trzeba ustawić nazwy tabel, to odbywa się poprzez wywołanie set_prefix() method będzie skonfigurowanie nazwy tabel.

set_prefix($prefix, $set_table_names = true) 

jeśli sprawdzisz błąd sql. nazwy tabel są puste. Domyślny prefiks tabeli to 'wp_'.

rozwiązanie:

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

//then rest of your code.. 
+1

unikaj komentarzy, jak dzięki. cóż, po około 5 prostych godzinach walki to rozwiązało mój problem .. dzięki, tak bardzo! – gray

+0

To nie działa dla mnie! Obie bazy danych znajdują się na tym samym serwerze, ale nadal nie działają! Wszelkie sugestie, przy okazji, używając dokładnie tego samego kodu. –

+0

lepiej zamieścić nowe pytanie z kodem – MortalViews

Powiązane problemy