Re: WordPressで更新・お知らせ履歴を別ページで作る方法

WordPressで、更新履歴やお知らせ履歴をリスト表示したシンプルな別ページを作って、トップページやサイドバーからiFrameやphpのinclude等で呼び出したいケースがあります。
方法は色々ありそうです。私がクライアントさんのサイトで行った方法を紹介します。少々強引です。

私が実施した方法は、固定ページ内に更新履歴やお知らせ履歴のループをPHPで書いてしまう方法です。Exec-PHPプラグインを利用すれば、固定ページ内でPHPを実行することができます。

WordPressで更新・お知らせ履歴を別ページで作る方法

色々、最悪です。

まず、顧客案件で Exec-PHP を使うなんてもってのほか。
例えば、お客さんが以下のようなコードを通常記事に打ったら、MySQL のユーザーアカウント/パスワードが漏洩してしまいます。

<?php
echo DB_USER ."\n";
echo DB_PASSWORD."\n";
?>

まぁ、これは極端な例ですが…

Exec-PHP を入れているサイトの投稿者アカウント(管理者権限が無いアカウントでも!)が漏れてしまった場合、攻撃者は好きなだけサーバ上で php コードを実行できるので非常に危険です。
このプラグインを使うのはやめましょう。

あと、メインクエリーの中で query_posts() 使うなとか色々言いたいことはありますが…

この案件の場合はショートコードを用意してやるのが良いです。こんな感じ。

これで、固定ページ中に [recent_posts] ってショートコードを書いてやれば表示できるようになります。

追記:
もしくは、テーマテンプレート内にウィジェットエリアを用意して「最近の投稿」ウィジェットを使っても良いねって指摘もありました。

そっちの方が簡単かもですね。やりやすいほうで。

追記2:
似たようなことをやるプラグインもあるそうです。

[WordPress] 投稿や固定ページの時だけ出力する奴

WordPress で、投稿や固定ページの時だけ出力したい(またはしたくない)文書を書くためのショートコード。
functions.php とかに追記してね。

使い方は
[is_singular]投稿や固定ページの時だけ出力したい文章[/is_singular]
または
[is_singular enable=FALSE]投稿や固定ページの時だけ出力したくない文章[/is_singular]

class Is_singular_ShortCode {
	function __construct() {
		add_shortcode('is_singular', array(&$this, 'Shortcode_Handler'));
	}
	function Shortcode_Handler($atts, $content = null) {
		extract( shortcode_atts( array(
			'enable' => TRUE
			), $atts) );
		$return_text = '';
		$enable = (strtolower($enable) === 'false' ? FALSE : TRUE);
		if ($enable && is_singular()) {
			$return_text = $content;
		} else if (!$enable && !is_singular()) {
			$return_text = $content;
		}
		return $return_text;
	}
}
new Is_singular_ShortCode();

[WordPress] 有効なショートコードタグの一覧を取得する

WordPress で使用可能なショートコードは、グローバル変数 $shortcode_tags に保存されてる。
$shortcode_tags は、キーがショートコード名、バリューがショートコードが記載された時に呼び出されるコールバック関数。

一覧は、以下のコードで取得可能。

global $shortcode_tags;
$tagnames = array_keys($shortcode_tags);