質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

15735閲覧

【wordpress】別のDBからSQL文を使って新着情報を表示したい

financyy

総合スコア18

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

3グッド

4クリップ

投稿2016/01/10 00:43

編集2016/01/10 03:09

同列階層に2つWordpressをインストールしており、1つのWordpressをルートで表示しています。
DBは別々です。
-wp ←ルートに表示
-blog

上記の「wp」で表示しているトップページの中に、「blog」の新着記事(投稿)を表示したいです。
いろいろと調べて「wp」のfunction.php内に下記を追記しました。

/*DB設定を行います。*/ $another_db_name = 'dbname'; $another_db_user = 'dbuser'; $another_db_pass = 'dbpass'; $another_db_host = 'another_host'; $another_tb_prefix = 'wp_hoge_'; $anoteher_wpdb = new wpdb($another_db_user, $another_db_pass, $another_db_name, $another_db_host); //プレフィックスの設定(忘れがち) $anoteher_wpdb->set_prefix($another_tb_prefix);

参考にしたURL:http://qiita.com/rojiuratech/items/87d5f7dd1a59bc791308

取得したい情報は、「blog」内の投稿最新記事6記事なのですが、取得するSQL文が良くわからず困っています。。
【取得したい情報】
・ページタイトル
・投稿日時
・カテゴリ
・アイキャッチ画像

SQL

1<dl> 2<?php 3$results = $anoteher_wpdb->get_results(" 4 SELECT post_title, guid, ID, post_date 5 FROM $anoteher_wpdb->posts 6 WHERE post_type = 'post' 7 AND post_status = 'publish' 8 ORDER BY post_date DESC 9 LIMIT 6 10"); 11foreach ($results as $value) { 12 $date = str_replace('-', '.', mb_substr($value->post_date, 0, 10)); 13 print('<dt><span class="date">'.$date.'</span></dt><dd><a href="'.$value->guid.'">'.$value->post_title.'</a></dd>'); 14} 15?> 16</dl>

上記で、投稿日時とページタイトル・ページURLまで取得出来ました。
アイキャッチ画像とカテゴリの取得方法が分かりません。

よろしくお願いいたします。

回答をいただいたので試した方法を追記します。

PHP

1<?php 2//一覧情報取得 3$result = $anoteher_wpdb->get_results(" 4 SELECT post_title, id, guid, post_date 5 FROM $anoteher_wpdb->posts 6 WHERE post_type = 'post' 7 AND post_status = 'publish' /* かつ公開済の記事 */ 8 ORDER BY post_date DESC /* 新しい順に並び替え */ 9 LIMIT 6 10"); 11 12$the_post_id = 0;// カテゴリとアイキャッチを取得したい投稿のID 13 14$sql_for_categories = "SELECT t.term_id, t.name, t.slug 15 FROM {$anoteher_wpdb->term_relationships} AS tr 16 INNER JOIN {$anoteher_wpdb->terms} AS t ON t.term_id = tr.term_taxonomy_id 17 WHERE tr.object_id = {$the_post_id}"; 18 19$categories = $anoteher_wpdb->get_results($sql_for_categories, ARRAY_A); 20 21$sql_for_eyecatch = "SELECT meta_value 22 FROM {$anoteher_wpdb->postmeta} 23 WHERE post_id = (SELECT meta_value FROM {$anoteher_wpdb->postmeta} WHERE post_id = {$the_post_id} AND meta_key = '_thumbnail_id') AND meta_key = '_wp_attached_file'"; 24 25$eyecatch = $anoteher_wpdb->get_var($sql_for_eyecatch); 26 27//表示 28foreach ($results as $value) { 29 $date = str_replace('-', '.', mb_substr($value->post_date, 0, 10)); 30 print('<dt><span class="date">'.$date.'</span><span class="cate">'.$categories.'</span></dt><dd><a href="'.$value->guid.'"><img src="'.$value->eyecatch[0].'" />'.$value->post_title.'</a></dd>'); 31} 32?>
ByronHasegawa, YugoOgura, jester👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

このように取得することができると思います(テストしていませんが、考え方とコードの参考として)。

PHP

1$the_post_id = 0;// カテゴリとアイキャッチを取得したい投稿のID 2 3$sql_for_categories = "SELECT t.term_id, t.name, t.slug 4 FROM {$anoteher_wpdb->term_relationships} AS tr 5 INNER JOIN {$anoteher_wpdb->terms} AS t ON t.term_id = tr.term_taxonomy_id 6 WHERE tr.object_id = {$the_post_id}"; 7 8$categories = $anoteher_wpdb->get_results($sql_for_categories, ARRAY_A); 9 10$sql_for_eyecatch = "SELECT meta_value 11 FROM {$anoteher_wpdb->postmeta} 12 WHERE post_id = (SELECT meta_value FROM {$anoteher_wpdb->postmeta} WHERE post_id = {$the_post_id} AND meta_key = '_thumbnail_id') AND meta_key = '_wp_attached_file'"; 13 14$eyecatch = $anoteher_wpdb->get_var($sql_for_eyecatch);

投稿2016/01/10 02:08

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

financyy

2016/01/10 03:07

早速回答いただけて感激です! SQLの基本も理解できていないまま質問させていただいているのが問題なのですが、 回答いただいた記述を追記してみました。 <?php //一覧情報取得 $result = $anoteher_wpdb->get_results(" SELECT post_title, id, guid, post_date FROM $anoteher_wpdb->posts WHERE post_type = 'post' AND post_status = 'publish' /* かつ公開済の記事 */ ORDER BY post_date DESC /* 新しい順に並び替え */ LIMIT 6 "); $the_post_id = 0;// カテゴリとアイキャッチを取得したい投稿のID $sql_for_categories = "SELECT t.term_id, t.name, t.slug FROM {$anoteher_wpdb->term_relationships} AS tr INNER JOIN {$anoteher_wpdb->terms} AS t ON t.term_id = tr.term_taxonomy_id WHERE tr.object_id = {$the_post_id}"; $categories = $anoteher_wpdb->get_results($sql_for_categories, ARRAY_A); $sql_for_eyecatch = "SELECT meta_value FROM {$anoteher_wpdb->postmeta} WHERE post_id = (SELECT meta_value FROM {$anoteher_wpdb->postmeta} WHERE post_id = {$the_post_id} AND meta_key = '_thumbnail_id') AND meta_key = '_wp_attached_file'"; $eyecatch = $anoteher_wpdb->get_var($sql_for_eyecatch); //表示 foreach ($results as $value) { $date = str_replace('-', '.', mb_substr($value->post_date, 0, 10)); print('<dt><span class="date">'.$date.'</span><span class="cate">'.$categories.'</span></dt><dd><a href="'.$value->guid.'"><img src="'.$value->eyecatch[0].'" />'.$value->post_title.'</a></dd>'); } ?> カテゴリがすべてArray、アイキャッチが表示されませんでした… 恐らく書き方が違うと思うので調べてみますが、もし間違っている箇所がわかりましたら教えていただけると大変ありがたいです。
退会済みユーザー

退会済みユーザー

2016/01/10 03:34

カテゴリとアイキャッチの取得は、foreachブロックの中で行ってください。 さらに、$the_post_idには取得した6件のIDを代入するようにしてください。 つまり「$the_post_id = $value->ID;」とします。 $categoriesにはカテゴリーの情報が出力の通りArrayとして格納されています(未テスト)。 表示したいのはカテゴリー名ですか? カテゴリー名であれば、「$categories[0]["name"]」で取得できると思います。 $eyecatchにはアイキャッチ画像のファイル名が格納されています(未テスト)。 アップロードフォルダが「http://example.com/blog/wp-content/uploads/」であれば、画像の出力は「<img src="http://example.com/blog/wp-content/uploads/'.$eyecatch.'" alt="" />」のようになります。 各変数にどんな値が入っておりどのように出力すべきかは、PHPのvar_dump関数などを利用して考えてみてください。
financyy

2016/01/11 02:54

通知がなかったため、ご回答いただいていたことに気づくのが遅く失礼いたしました。。 指摘いただいた内容で試してみたところ、実現したい内容がすべて実現できました! こんなに早く、的確にご回答いただけるなんて思っていなかったので 本当に助かりました。ありがとうございました!!!
ByronHasegawa

2016/02/04 05:39

私も同じ問題をもっているのですが、「取得した6件のIDを代入する」というのができないです。 $the_post_id = $value->ID; 上記の箇所です。
guest

0

誤った回答なので削除しました。

投稿2016/01/10 01:42

編集2016/01/12 11:10
coba-coba

総合スコア1409

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/01/10 02:15 編集

データベースが異なるため、質問者さんの作成したwpdbを使用して取得しなければなりません。
coba-coba

2016/01/10 02:27

そうですね、ご指摘ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問