ページを選択

ストブロ

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からデータを抽出できます。

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

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

カラダマジック

おはようございます、今週は火曜日から週の始まりという方も多いのでは? 月曜休みでも土曜日出勤だからなんとなくチャラな感じの 桂 コヒ蔵です(^o^)丿~♪ 今朝も起きました。 当然ですw 朝起きが苦手な私は、目覚まし時計をいっぱいセットします。...

良い物はやっぱり高いのかな(^^ゞ

毎度馬鹿馬鹿しいブログにお付き合い頂いております。 ストブロのコヒ蔵です(^o^)丿~♪ 仕事でアドベ製品をちょいちょい使うのですが、 半年前までは触ったことがない製品を買ってはせっせと勉強しております。...

カジョゥハ・ンーノウです。

はじめまして、おはようございます。 最近人気の香港出身映画監督、カジョゥハ・ンーノウです。 うそ、コヒ蔵です♪ おなかの調子がよくないここ数日ですが、 私の過剰反応っぷりが自分で面白いので、皆さんにもその滑稽な姿をお伝えしたいと思っています。...

シドロー・モドローンです。

はじめまして、おはようございます。 ハリウッドスターのシドロー・モドローンです。 うそ、コヒ蔵です orz 今朝は寝坊しました。 寝坊してシドロモドロw シドロモドロで、 テンヤワンヤで、 アタフタで、 バタバタです。...

電器屋Walker新CMシリーズ(3)

Taiji君バージョン(アップル屋Walker チクチクツッコミ付き) Coffeeバージョン(可もなく不可もなく、スタンダードバージョン) Cheekバージョン(春だし、やっぱりムサイおじさん声より女の子の声だよねバージョン)...

調査に行ってきましたよ♪

ご機嫌如何ですか? INSTのコーヒーです(^o^)丿 昨日は日曜日。 と、言うことで電器屋さんへ調査へ行って来ました(^o^)丿 お店は大変な賑わい! で、メーカーさんから応援が来てたので早速聞き込み!!...

Do you make your week as you wish?

ぐるぐるっと回って一週間! 日曜日から新しい一週間が始まるというのが本当らしいのですが、 企業戦士、社会の歯車たる私にはどうしても「月曜日」が週の始まりな 気分です。 私の地方ではようやく春の気配を感じるようになってきました。 すっきりと晴れ渡った空。...

スズメの導入を検討します

ちゅんちゅん♪ スズメには全力で逃げられて、 ハトには大群にたかられる。  桂 コヒ蔵です(^o^)丿~♪ みなさん、朝食ってどうしていますか? 私の場合、以前は朝食を食べませんでした。 「ご飯食べる時間があるなら寝ていたい!!」ってのが本音ですがw...

ほぼ日刊の日記なら

全国1億3千万の○○ファンの皆様、こんにちわ。 軽妙な「ら抜き言葉」でお馴染み、桂 コヒ蔵です。 今日から改名して「ラーヌキ コヒ蔵」にしようとしましたが、市役所で苦笑いされましたw さて、みなさん毎日続けている事って何かありますか?...

ダイエットとチョコレートの甘い関係。

突然ですが、 私コーヒーはこの2年間で20キロ程のダイエットに成功しました。 ダイエット生活を本にまとめて夢の印税生活・・・と思っているのですがw 冗談はさておき、やれパソコンだ、やれゲームだと...

電器屋Walkerの新CM、「絶賛配信中」バージョン

以前から使用していた「パーソナリティー、Taiji、Coffee」で始まるCMは INST内の評判が結構良かったんです。 でも、実は・・・ 宇都宮に出張に行った際に、ホテルで収録ww ビジネスホテルに何十回と響き渡る「絶賛配信中」の声ww...

電器屋Walkerの新しいCMシリーズ(2)

電器屋Walkerの新しいCMシリーズ(2)です。 当然配信中にも流れますが、こちらでもちょっと紹介しますww 基本的に全員同じ内容を言っているはずです。(はず?w) どっから聞いても「アップルWalker」なTaiji君のCMでしたがw...

0コメント


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

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

開催のお知らせ

詳細はこちら

国際ポッドキャストの日

International Podcast Day Event

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

まとめファンサイト