work.log

元エンジニアの備忘録的ブログ

WordPressの投稿記事内にウィジェットを表示させる (プラグイン不使用)

投稿:

WordPress の投稿記事内にウィジェットを表示させたい!という要件が出てきたのでちょっと調べてみました。

例えば、記事本文に書いてある <DIV> の真下にウィジェットを表示したいって場合。

<!-- ここから記事本文 -->
<div class="thumbnail">
	<img src="https://worklog.be/images/sample.jpg >
</div>
<!-- ここにウィジェットを差し込みたい! -->
これはサンプル画像です。
<!-- ここまで記事本文 -->

要はウィジェットを使ってコンテンツの一部を一括管理したいって話です。

この場合は、正規表現と WordPress のフィルターフック、そして PHP の ob_start() 関数を利用するとできます。

functions.php にはこんな風に書くといける。

function add_more_content( $content ) {

	$pattern = '/(<div class="thumbnail">.+?<\/div>)(.+)/is';

	if ( preg_match( $pattern, $content, $matches ) ) {

		$content = $matches[1];

		ob_start();

		/* get_sidebar 関数でテンプレート sidebar-add-more.php を読み込み */
		get_sidebar( 'add-more' );

		$content .= ob_get_contents();

		ob_end_clean();

		$content .= $matches[2];

	}

	return $content;

}
add_filter( 'the_content', 'add_more_content' );

ウィジェット用のテンプレートは「sidebar-add-more.php」は別途作成済みという前提です。

後から追加するって話しなので自由自在な位置にとはいきませんが、正規表現で引っ掛けれそうな場所があればそこで頑張れると思う。

今回はプラグインを使うのが嫌だったのでこのようにしましたが、ほぼ同じことをしてくれるプラグインもあるようなので良くわからない人はそっちがオススメです。