web-dev-qa-db-fra.com

Dernier post d'une autre base de données

J'essaie d'ajouter le message le plus récent d'une autre base de données Wordpress (sur le même serveur dans toute l'actualité), mais j'obtiens l'erreur suivante:

Fatal error: Call to undefined method wpdb::query_posts() in /var/www/site/wp-content/themes/custom/footer.php on line 68

Voici le code:

<!-- .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; ?>
1
Jamie Howard

La classe Wordpress wpdb est un peu différente de la méthode habituelle d'interrogation en ce sens que vous exécutez des requêtes de base de données "Vanilla".

Vous pouvez voir la documentation sur la classe wpdb sur la documentation Wordpress: http://codex.wordpress.org/Class_Reference/wpdb#Run_Any_Query_on_the_Database

De plus, en ce qui concerne votre code, vous devriez pouvoir changer la ligne ici:

$originaldb->query_posts( 'posts_per_page=1' );

Pour quelque chose comme ça:

$results = $originaldb->get_results( "SELECT * FROM $wpdb->posts LIMIT 1" );

Cela vous fournira un tableau de messages que vous pourrez ensuite traiter en boucle:

if($results):
  foreach($results as $post): setup_postdata($post); 
    // do stuff with normal wp template tags
  endforeach;
else: 
  // no posts 
endif;
1
jordanandree
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;  
}
1
Muhammed