web-dev-qa-db-ja.com

別の投稿からサムネイルを取得する WP サイト

私は2つのWordPressをインストールしています。1つは http://inversekarma.in 、もう1つは http://inversekarma.in/photos です。後者はフォトブログで、そのテーマは標準のWP投稿サムネイルを使用しています(正確にはEDIT:特集画像)。最初のサイトのサイドバーに2番目のサイトの最新のサムネイルを表示する方法はありますか?

4
GPX

これに近づくには、(少なくとも)two(2)wayがあります。

  1. あなたは2番目のデータベースを問い合わせるをすることができます。それはあなたが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'];

もっと説明が必要な場合は、コメント欄に記入してください。

6
MikeSchinkel

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の値を取得することもできます。これには、画像と代替サイズに関する追加情報が含まれています。

2
Jan Fabry