5

wordpress を使用して、他のデータベースからカスタム投稿にアクセスしようとしています。これを行うには、現在の$wpdbグローバル変数を変更しました:

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

これはエラーを表示しませんが、使用しようとするとWP_Query:

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

次のエラーが表示されます。

WordPress データベース エラー: [SQL 構文にエラーがあります。'FROM WHERE 1=1 AND .post_type = 'produtos' AND (.post_status = 'publish' OR .' at line 1] 付近で使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください]

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

この問題に対するエレガントな解決策を探しています。

4

1 に答える 1

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..
于 2013-09-24T21:16:40.083 に答える