WordPress

【WordPress】投稿の上下にウィジェットエリアを作る

久々のWordPress記事だよ…
--
どうもこんにちは、しろくまこです

WordPress

以前、定型文をカスタムフィールドで入力して決まった位置に出力するっていう記事を書きましたが、その出力場所をウィジェットエリアで指定する【テンプレートファイル(single.php)に書き込むって言ってたけどウィジェット使った方が何かと楽だよ…】というお話です

↑赤枠のところが新しく作るウィジェットエリアで、カスタムフィールドで入力したコメントが入るようにします

functions.phpにコードを書き込む

元々投稿の上下にウィジェットエリアがあるテンプレートであればこの部分は必要ありません(※もし無かった時のための備忘録的なやつです)

/*ウィジェットエリアを定義*/
add_action('widgets_init', 'register_mywedgets');
 
function register_mywedgets(){
	// 記事上部のウィジェットエリアを定義
	register_sidebar( array(
		'name' => __( '記事上部のウィジェットエリア' ),
		'id' => 'post_top',
		'description' => __( '記事上部に表示されるウィジェットエリアです。' ),
		'before_widget' => "\t\t<div id=\"post_top\"\n>",
		'after_widget' => "</div><!-- /#post_top -->\n",
		'before_title' => '<h3 class="widget-title">',
		'after_title' => '</h3>',
	) );
	// 記事下部のウィジェットエリアを定義
	register_sidebar( array(
		'name' => __( '記事下部のウィジェットエリア' ),
		'id' => 'post_bottom',
		'description' => __( '記事下部に表示されるウィジェットエリアです' ),
		'before_widget' => "\t\t<div id=\"post_bottom\">\n",
		'after_widget' => "</div><!-- /#post_bottom -->\n",
		'before_title' => '<h3 class="widget-title">',
		'after_title' => '</h3>',
	) );
}
 
 
/*ウィジェットをフィルターフックにセット*/
add_filter('the_content','my_content');
 
function my_content($content){
	if(!is_single()){
		return $content;
	}
	$new_content = '';
	$new_content .= get_dynamic_sidebar('記事上部のウィジェットエリア');
	$new_content .= $content;
	$new_content .= get_dynamic_sidebar('記事下部のウィジェットエリア');
	return $new_content;
}
//dyndamic_sidebar の文字列化
function get_dynamic_sidebar($index = 1){
	$sidebar_contents = "";
	ob_start();
	dynamic_sidebar($index);
	$sidebar_contents = ob_get_clean();
	return $sidebar_contents;
}

これで記事の上と下にウィジェットエリアが出来ます

プラグイン「Insert PHP Code Snippet」をインストール

ウィジェットエリアに直接コードを書き込むのは怖いので、PHPコードをShort Codeで挿入できるプラグイン「Insert PHP Code Snippet」を使います

プラグイン新規追加ページで「Insert PHP Code Snippet」を検索、インストールして、有効化

PHPコードを書き込んで、任意の名前をつけます

記事上のウィジェットエリアにショートコードを挿入すればOK!

投稿の上下にウィジェットがあれば、後から色々追加したり、位置を変えられたりするから便利よね、ていう

***ここまで読んでいただきありがとうございました***

コメント

タイトルとURLをコピーしました