Получение эскизов постов с другого сайта WP


У меня есть две установки WordPress, одна в http://inversekarma.in и другой в http://inversekarma.in/photos . Последний является фотоблогом, и в его теме используются стандартные эскизы сообщений WP (РЕДАКТИРОВАТЬ: избранные изображения, если быть точным!). Есть ли способ показать самые последние эскизы со второго сайта на боковой панели моего первого сайта?

Author: GPX, 2011-01-01

2 answers

Есть (по крайней мере) два (2) способа подойти к этому:

  1. Вы можете запросить вторую базу данных , для чего вам потребуется сохранить учетные данные базы данных в двух местах или, по крайней мере, в файле включения, или

  2. Вы можете создать простой канал JSON для своего фотоблога, использовать канал в своем основном блоге и кэшировать его в течение короткого времени. Это приведет к небольшой задержке при загрузке страницы по истечении срока действия кэша, но поскольку оба находятся на одной машине, это не должно быть проблемой.

Дайте мне знать, что вы предпочитаете, и если я обновлю ответ, чтобы вы знали, как это сделать.

ОБНОВЛЕНИЕ

Для подключения к другой базе данных вы можете прочитать больше об этом здесь:

Итак, вот что я взломал для вас, функцию под названием show_thumbnails_2nd_db(), которую вы можете скопировать в свою тему functions.php файл:

function show_thumbnails_2nd_db() {
  global $wpdb;
  global $table_prefix;
  $save_wpdb = $wpdb;
  $save_prefix = $table_prefix;
  include_once(ABSPATH . '/photos/database-credentials.php');
  extract($database_credentials);
  $wpdb = new wpdb($DB_USER, $DB_PASSWORD, $DB_NAME, $DB_HOST);
  wp_set_wpdb_vars();

  // This is the code for featured images  
  $sql = <<<SQL
SELECT DISTINCT CONCAT('<img src="',attachment.guid,'"/>') AS url
FROM 
  {$wpdb->posts} attachment
  INNER JOIN {$wpdb->postmeta} ON attachment.ID={$wpdb->postmeta}.meta_value AND {$wpdb->postmeta}.meta_key='_thumbnail_id'
  INNER JOIN {$wpdb->posts} ON {$wpdb->posts}.ID={$wpdb->postmeta}.post_id
WHERE {$wpdb->posts}.post_status='publish'
  AND attachment.post_type='attachment'
ORDER BY attachment.ID DESC
LIMIT 10
SQL;
  $post_urls = $wpdb->get_col($sql);
  if (is_array($post_urls))
    echo implode("\n",$post_urls);

// This is the code for post thumbnails  
//   $sql = <<<SQL
// SELECT DISTINCT {$wpdb->posts}.ID
// FROM {$wpdb->posts}
// INNER JOIN {$wpdb->posts} attachment
//    ON {$wpdb->posts}.ID=attachment.post_parent
// WHERE {$wpdb->posts}.post_status='publish'
//   AND attachment.post_type='attachment'
// ORDER BY attachment.ID
// LIMIT 10
// SQL;
//   $post_ids = $wpdb->get_col($sql);
//   foreach($post_ids as $post_id) {
//     $thumbnail = get_the_post_thumbnail($post_id);
//     if ($thumbnail) {
//       echo $thumbnail;
//     }
//   }
  $table_prefix = $save_prefix;
  $wpdb = $save_wpdb;
}

Примечание: вышесказанное предполагает, что вы создали database-credentials.php в корне своего блога с фотографиями, и это должно выглядеть так:

<?php    
$database_credentials = array(
  'DB_NAME' =>  'your_database',
  'DB_USER' =>  'your_db_user',
  'DB_PASSWORD' =>  'your db password',
  'DB_HOST' =>  'localhost',
  'table_prefix' => 'your_photos_db_prefix_',
);

Затем внутри /wp-config.php для ваших фотографий блога вы бы заменили разделы кода, которые выглядят следующим образом:

// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define('DB_NAME', 'your_database');

/** MySQL database username */
define('DB_USER', 'your_db_user');

/** MySQL database password */
define('DB_PASSWORD', 'your db password');

/** MySQL hostname */
define('DB_HOST', 'localhost');

И это:

$table_prefix  = 'wp_';

С этим:

include_once(ABSPATH . '/database-credentials.php');

// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define('DB_NAME', $database_credentials['DB_NAME']);

/** MySQL database username */
define('DB_USER', $database_credentials['DB_USER']);

/** MySQL database password */
define('DB_PASSWORD', $database_credentials['DB_PASSWORD']);

/** MySQL hostname */
define('DB_HOST', $database_credentials['DB_HOST']);

$table_prefix  = $database_credentials['table_prefix'];

Если вам нужно больше объяснений, просто спросите в комментариях.

 6
Author: MikeSchinkel, 2020-06-15 08:21:38

Ответ Майка отличный, но я бы использовал другой SQL-запрос, так как идентификатор GUID записи вложения может измениться при смене серверов или перемещении блога. Моя версия также предоставляет вам доступ к информации о записи в блоге, что полезно, если вы хотите перейти по ссылке на нее.

SELECT post.ID, post.post_title, attachment_meta.meta_value AS upload_relative_path
FROM {$wpdb->posts} AS post
    JOIN {$wpdb->postmeta} AS post_meta ON (post_meta.post_id = post.ID AND post_meta.meta_key = '_thumbnail_id')
    JOIN {$wpdb->postmeta} AS attachment_meta ON (attachment_meta.post_id = post_meta.meta_value AND attachment_meta.meta_key = '_wp_attached_file')
WHERE post.post_status = 'publish'
    AND post.post_type = 'post'
ORDER BY post.post_date DESC
LIMIT 10

Вместо _wp_attached_file вы также можете получить значение _wp_attachment_metadata, которое содержит дополнительную информацию об изображении и альтернативных размерах.

 2
Author: Jan Fabry, 2011-01-13 12:18:55