Blog

ブログ

WordPressをもっとカスタマイズするための、記事情報の解析方法

WordPressは素晴らしいフリーテーマがたくさんあるので、それをいじるだけでもカスタマイズは習得できます。
ですが、実務的なカスタマイズに必要となる「詳しい記事情報を解析する方法」は意外と紹介されていません。

簡単に実験できるテーマもおまけにつけて、ざっくりまとめてみました。
PHPのことはあまりよくわからない…という人たちは、これをとっかかりに学習してみてはいかがでしょうか。

0:記事情報解析用のテーマ「posttest」

これは、記事情報を解析するための構文だけが書いてある、実験用のテーマファイルです。
ブログ用のテーマではないので「index.php」しかありませんがw
この先を読みながら、あなたのブログに反映して試してみてください。

記事情報解析用のテーマ「posttest」ダウンロード

1:サーバー情報を得る

サーバー情報を取得、出力します。
これはWordPressの独自タグではなくPHP標準の関数です。
※第三者が閲覧できるページで実行しないようにしてください。

<?php
	print_r($_SERVER);
?>

2:カテゴリー情報を得る

カテゴリー情報を取得、出力します。
出力内容は「$posts[0]のカテゴリー情報」なので、複数カテゴリーが指定されている可能性もあります。
また、出力結果の記事が一件もないと、この内容もNULLになってしまいます。出力結果がゼロの可能性があるけれどカテゴリーの情報を取得したい…という場合は、ちゃんと引数にカテゴリーIDを明示するようにしてください。【訂正】この関数は引数がありません。すいません。DBから直接取得した方が早いかもしれません(汗)

<?php
	$cat = get_the_category();
	print_r($cat);
?>

3:記事情報を解析

query_posts関数を実行していない状態では、
オブジェクト「$posts」にはそのページに沿った記事情報が入っています。
単純な出力は「<?php while ( have_posts() ) : the_post() ?>~<?php endwhile ?>」でできますが、PHPのforeach関数でも取得することができます。

<?php while ( have_posts() ) : the_post() ?>
<?php print_r ($post) ?>
<?php endwhile ?>

4:抽出条件の上書き

query_posts関数を使用すると、出力される記事の条件を変更することができます。
グローバル変数「query_string」を上書きするのが確実です。
※ID「5」の記事を抽出するようになっています。構文の「cat=5」のところを任意で書き換えてください

指定できるクエリについてはWordPress Codex内「query posts」の解説を参照してください。

<?php
	$Q = "&category_name=&cat=5";
	global $query_string;
	query_posts($query_string . $Q);
?>

5:the_postを再実行後記事情報を解析

query_posts関数を使用後、もう一度
「<?php while ( have_posts() ) : the_post() ?>~<?php endwhile ?>」を実行すると、記事情報が新しく定義したものに変更されます。
(3の後に4→5と実行して内容を比較してみてください)

<?php
	while ( have_posts() ){
		the_post();
		print_r ($post);
	}
?>

6:オブジェクト内容の取得

記事タイトルだけ必要な場合は、「->」でキーを指定することで、文字列で習得できます。
配列のように見えますが、$post[‘post_title’]では取得できないことに注意してください。

<?php
	while ( have_posts() ){
		the_post();
		echo $post->post_title . '<br />';
	}
?>

補足

WordPressのpostに入っている値は、全てPHPエンコード処理がされています。
このため、クォーテーションやバックスラッシュが含まれる記事を関数に投入しても問題は起きません。
ただし、HTMLはエンコードされていないので、HTMLタグが反映されると危ない状況で使用する場合は
strip_tags関数やhtmlspecialchars関数を通すようにしましょう。

<?php
	while ( have_posts() ){
		the_post();
		echo strip_tags($post->post_content) . '<hr />';
	}
?>

WordPressはPHPの知識があれば、簡単にカスタマイズできるのが魅力です。
ですが、他のCMSと違ってプログラムを直に扱うため、テーマファイルの見通しが利きにくく、予想外の不具合やセキュリティホールが発生する可能性が高い側面があります。
趣味レベルなら問題ないですが、実務でWordPressを構築する場合は仕様やリスクを考慮して正しく利用したいものです。