web-dev-qa-db-fra.com

Afficher le contenu d'un WP site sur séparé WP site

J'ai deux WP sites Web totalement distincts. Différents domaines, différentes bases de données. Je gère les deux et ils sont tous deux hébergés sur un serveur dédié. J'essaie d'inclure du contenu de base qui nécessite un peu plus qu'un flux RSS. Je dois extraire des données de SITE-1 et les afficher sur SITE-2, en utilisant le formatage de base WP à partir d'une boucle. Partout où j'ai regardé, cela semble impossible. J'ai essayé d'appeler wp-load.php mais je ne peux pas le faire fonctionner et je ne suis pas sûr que ce soit la bonne façon de faire. J'ai accès aux serveurs racine des deux sites, et même à la racine du serveur si nécessaire. Y a-t-il un moyen de faire ça? Merci!

6
RodeoRamsey

Ouais

$wpdb2 = new wpdb('dbuser', 'dbpassword', 'dbname', 'dbhost');

// get 10 posts, assuming the other WordPress db table prefix is "wp_"
$query = "SELECT post_title, guid FROM wp_posts
          WHERE post_status = 'publish'
           AND post_type = 'post'
          ORDER BY post_date DESC LIMIT 10";

$someposts = $wpdb2->get_results($query, OBJECT);
foreach($someposts as $somepost)
  echo "<a href=\"{$somepost->guid}\">{$somepost->post_title}</a><br />";

Une autre méthode consiste à utiliser le HTTP api :

Code dans votre premier site, où vous souhaitez afficher les données:

$send = array(
  'body' => array(
    'action' => 'get_some_posts',
    // send other data here, maybe a user/password if you're querying senstive data
  ),
  'user-agent' => 'RodeoRamsey; '.get_bloginfo('url')
);

$response = wp_remote_post('http://yoursiteurl.com/', $send);
  if (!is_wp_error($response) && ($response['response']['code'] == 200)) echo $response['body'];

Code dans votre deuxième site, dans le functions.php du thème (ou créez un plugin):

add_action('template_redirect', 'process_post_request');
function process_post_request(){
  if($_POST['action'] == 'get_some_posts'):
    $posts = new WP_Query();
    $query = array('posts_per_page' => 10);
    $posts->query($query);
    while ($posts->have_posts()):
      $posts->the_post(); // here's the usual loop
      ?>

      <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
      <?php the_content(); ?>

      <?php
   endwhile;
   die();
  endif;
}

La 2ème méthode est plus facile et plus flexible du point de vue du "formatage". Par exemple, ici, vous pouvez facilement afficher en écho la vignette de la publication au format HTML. Il serait très difficile pour vous d’obtenir le lien vers la vignette en utilisant la base de données ...

7
onetrickpony

Je pense que votre question est très similaire à cette question:

En gros, il vous suffit de créer le $wpdb en utilisant les informations d'identification de sécurité de votre autre site. Examinez ma réponse à cette question et dites-moi si elle répond ou non à votre question et, dans le cas contraire, pourquoi, je pourrais peut-être fournir une meilleure réponse.

2
MikeSchinkel