Отображение контента с одного сайта WP на отдельном сайте WP


У меня есть два совершенно разных веб-сайта WP. Разные домены, разные базы данных. Я управляю ими обоими, и они оба размещены на выделенном сервере. Я пытаюсь включить некоторый базовый контент, который требует чуть больше, чем RSS-канал. Мне нужно извлечь данные с САЙТА-1 и отобразить их на САЙТЕ-2, используя базовое форматирование WP из цикла. Куда бы я ни посмотрел, это кажется невозможным. Я пытался дозвониться wp-load.php но не могу заставить его работать, и я не уверен, что это вообще правильный путь. У меня есть доступ к корневым серверам обоих сайтов и даже к корневому серверу, если это необходимо. Есть ли вообще возможность это сделать? Спасибо!

Author: RodeoRamsey, 2011-01-18

2 answers

Да

$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 />";

Другой способ - использовать HTTP api:

Код на вашем первом сайте, где вы хотите отобразить данные:

$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'];

Код на вашем втором сайте, в теме functions.php (или создайте плагин):

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;
}

2-й метод проще и гибче с точки зрения "форматирования". Например, здесь вы можете легко воспроизвести эскиз сообщения в виде html, в то время как при использовании подхода к базе данных вам будет очень сложно получить ссылку на уменьшенное изображение...

 8
Author: onetrickpony, 2011-01-18 07:43:24

Я думаю, что ваш вопрос очень похож на этот вопрос:

В основном вам просто нужно создать $wpdb, используя учетные данные безопасности для вашего другого сайта. Взгляните на мой ответ на этот вопрос и дайте мне знать, отвечает ли он на ваш вопрос или нет, а если нет, то почему, чтобы я мог дать лучший ответ.

 2
Author: MikeSchinkel, 2017-04-13 12:37:39