中途半端を極める

web関連で役に立ちそうなものを紹介いたします

Wordpress

WordPress記事本文の中でPHPを実行する方法まとめ

投稿日:

WordPress構築中にに記事本文の中に記事の一部を表示したいという時があるでしょうか?今回は記事本文中でPHPを使用できるようにする方法をまとめてみました。
記事本文でPHPが実行できますと、表示の仕方に幅ができます。

方法1:「Exec-PHP」プラグインを使用する

「Exec-PHP」プラグインは記事本文内でテンプレートタグを使用することをできるようにするプラグインです。ただセキュリティ上あまりよろしくないらしいのです。

以下「Exec-PHP」プラグインページ
https://wordpress.org/plugins/exec-php/

方法2:function.phpの変更で対応

function.phpに以下のような記述を書きます。

/**
* Inline PHP
*/
function exec_php($a)
{
try {
eval('ob_start();'.$a[1].'$r = ob_get_contents();ob_end_clean();');
} catch (Exception $e) {}
return $r;
}

function inline_php($content)
{
return preg_replace_callback('/<exec>((.|\n)*?)<\/exec>/', 'exec_php', $content);
}

add_filter('the_content', 'inline_php', 0);

記事本文には以下のように記述するとphpが実行できるようになります。

<p>記事本文。記事本文。記事本文。記事本文。記事本文。記事本文。記事本文。記事本文。</p>
<exec>
echo 'Today: ' . date('Y-m-d');
</exec>
<p>記事本文。記事本文。記事本文。記事本文。記事本文。記事本文。記事本文。記事本文。</p>

ただしWYSIWYGなど使用すると表示が変になったりするので、HTMLタグでの編集のみにする必要があります。

参考サイト:【WordPress】投稿の中でphpを実行したい
http://www.softel.co.jp/blogs/tech/archives/2031

方法3:記事本文内でショートコードを使用できるようにする

function.phpに以下のような記述を書きます。

function getCatItems($atts, $content = null) {
	extract(shortcode_atts(array(
		"num" => '5',
		"cat" => ''
	), $atts));
	global $post;
	$oldpost = $post;
	$myposts = get_posts('numberposts='.$num.'&order=DESC&orderby=post_date&category='.$cat);
	$retHtml='<ul>';
	foreach($myposts as $post) :
		setup_postdata($post);  
		$retHtml.='<li><a href="'.get_permalink().'">'.the_title("","",false).'</a></li>';
	endforeach;
	$retHtml.='</ul>';
	$post = $oldpost;
	return $retHtml;
}
add_shortcode("list", "getCatItems");

記事本文には以下のように記述するとfunction.phpに記載したphpが実行できるようになります。

<p>記事本文。記事本文。記事本文。記事本文。記事本文。記事本文。記事本文。記事本文。</p>
[list cat="1" num="10"]
<p>記事本文。記事本文。記事本文。記事本文。記事本文。記事本文。記事本文。記事本文。</p>

※こちらで紹介しているコードは特定のカテゴリの新着記事一覧を出力するショートコードです。

ショートコードであればWYSIWYGを使用しても崩れないようでした。
(使用しているWYSIWYGによっては崩れる可能性があります。)

参考サイト:記事内に特定カテゴリの新着一覧を出すショートコード
http://appofit.com/wordpress/template-wp/shortcode-wp/

-Wordpress

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

関連記事

[wordpress]カテゴリ別アーカイブ(月次)を出力する方法 修正版

以前の記事で同様なことを記事にさせていただいておりましたが、紹介していた方法では指定されているカテゴリに該当記事がないのにもかかわらずアーカイブリンクが出力されてしまうという現象が起きていました。その …

WordPressの特定ディレクトリにBasic認証をかける方法

特定のディレクトリ以下に閲覧制限をかけたいときに使える方法のひとつです。

簡単に海外からのスパムコメント対策ができるプラグイン「Throws SPAM Away」

WordPressでブログを運用しておりますが、大量にスパムコメントに悩まされておりました。 デフォルトで「Akismet」というプラグインが入っておりますが、有効化させるためにはAPIキーの取得など …

[wordpress]カテゴリ別アーカイブを出力する方法まとめ

WordPressのテンプレートをつくる際、デフォルトでそういう関数を用意していないのか!といいたくなるような部分ですが、今回はそのような部分をどのように実装するかまとめましたので、紹介いたします。

【WordPress】本体やプラグインのアップデート通知を非通知・非表示にする方法

最近ブログのカスタマイズを試みているので、Wordpressネタが多くなっております。 WordPressでは自動的にアップデート通知が来て、管理画面上から最新版にアップデートできるという機能がありま …