ページを選択

ストブロ

Coffee's Blog.

静的ページに外部のWordPressから記事を読み込む方法 解説

執筆者 | 2017年10月24日 | さくらのレンタルサーバー, ストブロ

php7.1に対応し、mysqli(手続き型)の記述スタイルで
複数のWordpressから記事一覧を取得する為のphpです。

早速部分毎に解説していきます。

1)データベースへの接続
まずPHPの中でデータベースに接続する方法ですが、以下の部分です。
ホスト名などを予め引数に代入しておきます。
$dbhost = 'ホスト名(例:mysql000.db.sakura.ne.jp)';
$dbuser = 'ユーザー名(例:gonbe)';
$dbpass = 'パスワード(例:password)';
$dbname = 'データベース名(例:inst-db)';

今回の重要なポイントでもあるmysqli 手続き型による接続には「mysqli_connect」を使用します。
$conn = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname);

そして文字化け防止の文字コード設定
mysqli_set_charset($conn, "utf8");

最後に念のため接続エラー処理を設定しておきます。
if(! $conn ) {
die('Could not connect: ' . mysqli_error());
}

2)記事の基本情報を取り出す。

どのデータテーブルから何の項目の情報をとるかを指定します。
ここでは「ID」、「投稿日」、「タイトル」、「guid」、「内容」を呼び出しています。
接頭辞の所はWordpressのインストールの際に設定した接頭辞を入れて下さい。(例:WP_)
whereを使い「状態が公開」で「種別が投稿」に限定し、
limitを使い「最新5件」に限定しています。
$sql = '
SELECT ID, post_date, post_title, guid, post_content
FROM 接頭辞posts
WHERE post_status = "publish"
AND post_type = "post"
ORDER BY post_date DESC
LIMIT 5';

先程の命令文を「mysqli_query」に突っ込んで、データベースから情報を得ます。
$result = mysqli_query($conn, $sql);
?>

いったんここで出力するhtmlを。今回はULで全体をくくります。
<ul class="wp-post">

3)取り出したデータを処理する。

取り出したデータを「while」と「mysqli_fetch_assoc」で順番取り出していきます。
<?php while ($item = mysqli_fetch_assoc($result)){

後でHTMLに流し込む為に必要な情報を引数に代入します。
pidは後でカテゴリを取り出す際に使用。
dataは一度取り出してから、時間などを非表示にする為、「substr」で範囲を切り出します。
/* 基本情報(タイトル、URL、コンテンツ) */
$pid = $item["ID"];
$title = $item["post_title"];
$link = $item["guid"];
$content = $item["post_content"];
$date = $item["post_date"];
$datefix = substr( $date, 0, 10 );

4)各記事毎の「カテゴリ」を取得する。
記事1件1件を処理する中で、カテゴリの取り出しをしていきます。
カテゴリに関わるテーブルが3つあるのでとても複雑に見えます。
term_relationships
term_taxonomy
term_id

因みにこの命令文は「3つのテーブルを1つに合わせてobject_idが投稿のidと同じ、そしてタクソノミーがカテゴリであるデータのnameを抽出しなさい」という命令です。

/* カテゴリー情報も取得したい場合 */
$sql_cate = '
SELECT name
FROM 接頭辞term_relationships
INNER JOIN 接頭辞term_taxonomy ON 接頭辞term_relationships.term_taxonomy_id = 接頭辞term_taxonomy.term_taxonomy_id
INNER JOIN 接頭辞terms ON 接頭辞term_taxonomy.term_id = 接頭辞terms.term_id
WHERE 接頭辞term_relationships.object_id = '. $pid . '
AND 接頭辞term_taxonomy.taxonomy = "category"
';

命令文を「mysqli_query」に突っ込んでデータを抽出。
$cate_res = mysqli_query($conn, $sql_cate);

カテゴリデータが複数ある場合を想定して、1)連想配列に格納し、2)1行のデータとして取り出す。
$cate_gories = array();
while ($cate_row = mysqli_fetch_assoc($cate_res)){
$cate_gories[] = $cate_row["name"];
};

連想配列に入ったデータを「implode」を使って、「,」で区切りながら1行にします。
$cate_gories = implode(",", $cate_gories);
?>

5)記事毎に出力するHTMLを整形

先ほど抽出したデータを引数に保管してありましたので、お好きなようにHTMLを書いてください。
今回は全体をULにしてあるのでLIで書いていきます。
<!– HTMLにてPHP変数を表示 –>
<li>
<a class="clearFix" href="<?php echo $link;?>">
<?php echo $title; ?>
<span> – <?php echo $datefix;?></span>
<span> <?php echo $cate_gories;?></span>
</a>
</li>

ここで記事事の「while」を閉じますので、後は抽出された記事の件数によりループします。
<?php
};
?>
</ul>
<?php

最後に念のためデータベースから切断して終了です。
/* PHPでデータベースから切断 */
mysqli_close($conn);
?>

この内容で例えば「getfromwp.php」みたいなファイルを作ります。

そして読み出したい側の、例えば「index.php」内で呼び出します。
因みに、私は「wwwフォルダの一つ上」にgetfromwp.phpを置いています(安全の為)その場合、以下の通りです。
<?php include_once( dirname( __FILE__ ) . '/../getfromwp.php' ); ?>
として呼び出すと、その場にULで囲まれたhtmlが出力されます。

あとはgetfromwp2.php getfromwp3.phpと増やしていけば、いくつでも別々の条件や別々のWPからデータを抽出できます。

良かったら参考にしてみてください。
使用は自己責任でお願いします。
安全対策には十分にご注意ください。

ご質問があればわかる範囲でお答えします!

PSNひっそりと再開

個人情報流出が問題となってサービスを停止していたプレイステーションネットワーク(通称:PSN)が一昨日5月28日ひっそりと再開しました。 ニュース報道ではサービス停止と情報流出の話題を大々的に取り上げたのに、 再開についてはほぼスルー?...

もふ・・・

今日はモフ曜日です(`・ω・´) 以上(/ω\) イヤン 桂 コヒ蔵でしたー( ^o^)ノ

DAIGORO with you, and me.

俺とおまえと どんどんっ♪ だいごろおー♪ ・・・ 焼酎はあまり好きじゃないですけど(/ω\) イヤン 最近「RUSE」というゲームにはまっています。 RTS(リアルタイムシミュレーションとか、リアルタイムストラテジーっていうのかな?)...

HDDデータの完全消去

昨日の続きですけど、パソコンを手放す際にはHDDを完全消去して個人情報などのデータが外部に漏れるのを防ぎたいですよね。 あと捨てるだけ、っていう状態ならHDD取り出してハンマーでゴチンゴチンやっちゃってくださいw...

週末始末記

なにやらこの週末はばたばた、ばたばた・・・ バタコさんかっ! コヒ蔵です( ・`ω・´)キリッ ってくらいばたばたでした。 土曜日出勤だったので、週末は土曜の夜から。 友人がパソコンを処分するっていうので、データの消去作業のお手伝い。...

2010/05/20は何を?

今日は眠たくてネタもないので去年の今頃は?とねじ巻きねじ巻き。 2010年05月20日は「夢か幻か・・・」 昨日我が家の無線LAN環境をちょっといじる必要があり、 でいじっていました。 無線LANに関してはこれまでずいぶんと頭を悩ませ、...

ジャンボ!

ドリームジャンボでしたか? 発売中ですよね。 ・・・  どの番号が当たるのか、こっそり教えてくれませんか?(`・ω・´) ・・・  当たった番号と私の番号、交換しませんか!(`・ω・´) ・・・  私に油田をちょうだい?(*ノωノ)キャ...

扇子を下さい。

レゴブロックを組み立てる的なセンスや粘り強さ、集中力は結構ある方だと思います。 いちから勉強すれば良いんでしょうが、サンプルコードやパターン学習、トライアンドエラーで XHTMLを書いたり。...

春雨ダイエット

夕食のコントロールを初めて・・・もう2年くらいにはなっていると思うのですが、 当初MAX85kg位あった私の体重も、時間をかけてゆっくりと降下し 一時71kg台まで下がりました。 そこから時間をかけてゆっくりと上昇し74kgに。 これはやばい!とWii...

コーヒーのノリノリEnglish

やぁ、みんな! 今日もコーヒー先生のノリノリEnglishの時間だよ! ちゃーんと復習してきたかなっ? ははは、ジョークさぁ! だって今日が初めてだもんな!w さて、早速今日の日常生活にガチで役に立つ バリュアボーなフレーズをスタディーして行こうぜ!...

iPhone Appって簡単に作れるのかな?

なんとなく、 なんとなくそう思う時があります。 iPhonAppって簡単に作れるのかな?って。 何十万本とAppはあるそうですが、なかなか自分にジャストミートっていうの探すの大変ですよね。 だったら作れたら良いのに。みたいなw...

パソコンうるさいw

MBAを買って一番気がついたことは・・・もとからあったデスクトップPCの騒音の大きさw 排熱の為のファンがギュンギュン回っている訳で、 慣れちゃうとなんていう事はないですが、比較すると顕著ですよね。...

0コメント


電器屋Walkerの過去配信のBGMで利用させて頂いております。

ポッドキャスト品質向上、整音テクニック 解説Live

開催のお知らせ

詳細はこちら

国際ポッドキャストの日

International Podcast Day Event

ツキイチ - 隣のポッドキャスト

まとめファンサイト