Получение эскизов постов с другого сайта WP
У меня есть две установки WordPress, одна в http://inversekarma.in и другой в http://inversekarma.in/photos . Последний является фотоблогом, и в его теме используются стандартные эскизы сообщений WP (РЕДАКТИРОВАТЬ: избранные изображения, если быть точным!). Есть ли способ показать самые последние эскизы со второго сайта на боковой панели моего первого сайта?
2 answers
Есть (по крайней мере) два (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'];
Если вам нужно больше объяснений, просто спросите в комментариях.
Ответ Майка отличный, но я бы использовал другой 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
, которое содержит дополнительную информацию об изображении и альтернативных размерах.