私は別のWordpressデータベースからの最新の投稿を追加しようとしています(実際には同じサーバー上にあります)が、次のエラーを受け取ります。
Fatal error: Call to undefined method wpdb::query_posts() in /var/www/site/wp-content/themes/custom/footer.php on line 68
これがコードです:
<!-- .entry-content -->
<?php
$originaldb = new wpdb('username', 'password', 'db', 'localhost');
$originaldb->query_posts( 'posts_per_page=1' );
if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<header class="entry-header">
<div class="entry-meta">
<?php echo '<span class="entry-day">'.get_the_date('j').'</span><br><span class="entry-month">'.get_the_date('M').'</span>'; ?>
</div>
<div class="title-box">
<h2 class="blog-title"><a href="<?php the_permalink(); ?>"><?php the_title() ?></a></h2>
<?php echo '<a href="'.get_author_posts_url( get_the_author_meta( 'ID' ) ).'">' . the_author() . '</a>'; ?>
</div>
<div class="clear"></div>
</header>
<div class="entry-content">
<?php the_excerpt(); ?>
</div>
<?php endwhile; else: ?>
Testing has failed
<?php endif; ?>
Wordpressのwpdbクラスは、 "Vanilla"データベースクエリを実行するという点で、通常のクエリ方法とは少し異なります。
Wpdbクラスに関するドキュメントはWordpressのドキュメントにあります。 http://codex.wordpress.org/Class_Reference/wpdb#Run_Any_Query_on_the_Database
また、あなたのコードに関して、あなたはここでその行を変更することができるはずです:
$originaldb->query_posts( 'posts_per_page=1' );
このようなものに:
$results = $originaldb->get_results( "SELECT * FROM $wpdb->posts LIMIT 1" );
これはあなたがループでそれから処理できるポストの配列をあなたに提供するでしょう:
if($results):
foreach($results as $post): setup_postdata($post);
// do stuff with normal wp template tags
endforeach;
else:
// no posts
endif;
function get_other_posts() {
$wpdb_old = wp_clone( $GLOBALS['wpdb'] );
$wpdb_new = &$GLOBALS['wpdb'];
// All you have to care about following two lines
$wpdb_new = new wpdb( 'your_db_username', 'db_password', 'new_db_name', 'localhost' );
$wpdb_new->set_prefix( 'wp_' );
// Now whatever function you'll call, it will use new database
$posts = get_posts( 'numberposts=5' );
// We are done so lets take the old wpdb back on its position
$wpdb_new = $wpdb_old;
}