WordPressで同じデータベース内の別のprefixのテーブルのデータを取得

たまに見かける?、あまり意味があるとは思えない複数インストールされたWordPress、何日か前に一つのコーポレートサイトなのにブログ毎にインストールされてて、さらにそれをトップページでRSS経由で新着を取得してるんでやたら重いっていうのに遭遇しました。

で、別件の修正だったのですが、あまりにも遅いんで下の様な感じで対応しました。ループの中に突っ込んだりしなければ、こんな感じで取得できると思います。データは$newsに格納してるだけですので適当に表示させる必要があります。念のため。(ん、これだと投稿日時が同じだと上書きされますね……)

 

<?php
global $wpdb;

$news = array();

$args = array(
  'posts_per_page' => 5,
  'orderby' => 'post_date',
  'order' => 'DESC',
  'post_type' => 'post',
  'post_status' => 'publish'
);

$temp_prefix = 'wp2_';
$old_prefix = $wpdb->set_prefix($temp_prefix);
// wp_set_wpdb_vars(); // dbは変わってないの不要
wp_cache_init();
$wpq = new WP_Query($args);
if ($wpq->have_posts()) {
  while ($wpq->have_posts()) {
    $wpq->the_post();
    $news[get_the_date('YmdHis')] = array('title' => get_the_title(), 'link' => get_permalink());
  }
}

// 初期状態に戻す
$wpdb->set_prefix($old_prefix);
wp_cache_init();
?>

 

参考にしたページ

WordPressでtable prefixを切り替えてデータを取得してみる | Beek

別のWordPressの投稿をget_posts()とかnew WP_Query()で取得する方法 – モンキーレンチ
今ならプライム会員は6,500円オフです……