2013-09-24 12 views
5

Sto tentando di accedere a post personalizzati da altri database utilizzando wordpress. Per fare questo ho cambiato l'attuale $wpdb variabile globale:Utilizzare wp_query dopo aver modificato il database tramite il nuovo wpdb

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

Questo non mostra eventuali errori, ma quando provo ad usare WP_Query:

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

ottengo il seguente errore:

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


Se uso $wpdb->get_results() e $wpdb->get_var() f unzioni posso realizzare quello che voglio:

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

Sto cercando una soluzione elegante a questo problema.

+0

Perché si sovrascrittura di '$ wpdb'? Che cosa stai cercando di ottenere esattamente? Qual è l'immagine più grande, che rende necessario? –

+0

Desidero utilizzare i "prodotti" del tipo di post dal sito Web principale nel sito Web mobile (un sottodominio con la propria installazione di wordpress). Ho letto questo [thread] (http://wordpress.stackexchange.com/questions/100666/how-can-i-connect-to-another-wp-database-and-use-wp-query) che ho dovrebbe sovrascrivere $ wpdb perché WP_Query lo usa. –

+0

Non sono sicuro, ma entrambi i wordpress sono la stessa versione –

risposta

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

dopo aver creato l'oggetto wpdb, è necessario impostare i nomi delle tabelle, è fatta chiamando il set_prefix() method sarà istituito i nomi delle tabelle.

set_prefix($prefix, $set_table_names = true) 

se si verifica l'errore sql. i nomi delle tabelle sono vuoti. Il prefisso tabella predefinito è 'wp_'.

soluzione:

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

//then rest of your code.. 
+1

evitare commenti come ringraziamenti. beh, dopo circa 5 ore di combattimento questo ha risolto il mio problema..grazie, così tanto! – gray

+0

Questo non funziona per me! Entrambi i database si trovano sullo stesso server ma continuano a non funzionare! Qualsiasi suggerimento, btw, usando lo stesso identico codice. –

+0

è meglio pubblicare una nuova domanda, con il tuo codice – MortalViews

Problemi correlati