私は2つのWordPressをインストールしています。1つは http://inversekarma.in 、もう1つは http://inversekarma.in/photos です。後者はフォトブログで、そのテーマは標準のWP投稿サムネイルを使用しています(正確にはEDIT:特集画像)。最初のサイトのサイドバーに2番目のサイトの最新のサムネイルを表示する方法はありますか?
これに近づくには、(少なくとも)two(2)wayがあります。
あなたは2番目のデータベースを問い合わせるをすることができます。それはあなたが2つの場所で、または少なくともインクルードファイルでデータベース資格を維持することを要求するでしょう
あなたの写真ブログ用に単純なJSONフィードを作成を作成して、メインブログ上のフィードを消費し、それを短期間キャッシュすることができます。キャッシュの有効期限が切れると、ページの読み込みに多少の待ち時間が発生しますが、どちらも同じマシン上にあるため、問題にはなりません。
あなたがどれを好むか、私が答えを更新するかどうかを教えてください。
他のデータベースに接続するには、ここで詳細を読むことができます。
それで、ここで私があなたのために一緒にハックしたもの、あなたがあなたのテーマのfunctions.php
ファイルにコピーすることができるshow_thumbnails_2nd_db()
と呼ばれる関数です:
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_',
);
それからあなたの photos blogのための/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'];
もっと説明が必要な場合は、コメント欄に記入してください。
Mikeの答えは素晴らしいですが、サーバーを変更したりブログを移動したりすると添付ファイルの投稿のGUIDが変わる可能性があるため、別のSQLクエリを使用します。私のバージョンでは、ブログ記事の情報にアクセスすることもできます。リンクしたい場合に便利です。
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
の値を取得することもできます。これには、画像と代替サイズに関する追加情報が含まれています。