GeneratePressでカテゴリなどの表示位置を変更する

今日も引き続きGeneratePressに関する記事になります。概要については前回記事参照ということで。
長くなりそうなので早速本題に移りますね。

GeneratePressではカテゴリやタグは記事の下に表示されます。
これを日付などと同じ箇所に表示させたいのですが、該当するカスタマイズ項目が無いのでコードを追加します。
といっても前回同様、GeneratePress側でフィルターが予め用意されているのでコードは単純です。

add_filter('generate_header_entry_meta_items', function() 
{
	return array('date', 'categories', 'tags', 'author');
});
add_filter('generate_footer_entry_meta_items', function()
{
	return array('comments-link');
});

それぞれの記事情報(entry-meta)に表示したい要素を配列で返すだけOKです。順番も反映されます。
上記のコードでは記事のヘッダーに日付、カテゴリ、タグ、投稿者が表示され、フッターにコメントへのリンクが表示される形になります。この辺はお好みでどうぞ。

で、これで終わりかと思いきや、カテゴリやタグをヘッダー側に表示すると対応するアイコンが表示されなくなります。
意図は分かりませんが、ヘッダー側ではアイコンを表示しないようcssで設定されているようです。
アイコンを表示したい場合は以下のcssを追加します。

.entry-header .cat-links::before, .entry-header .tags-links::before, .entry-header .comments-link::before
{
	display: inline-block;
}

これでアイコンも表示されるようになりました。
後は追加で余白などを設定して見た目を整えれば完成…ではなく。

GeneratePressではentry-metaに表示する情報が無い場合、entry-metaそのものをcssで非表示にしています。
しかしこれらは常にデフォルトの状態を想定しており、上記カスタマイズの内容は反映してくれません。
設定によっては空のentry-metaが表示されて余分な余白が発生してしまうため、きちんと非表示になるようコードを追加しておきます。

add_action('init', function()
{
	$settings = wp_parse_args(
		get_option('generate_blog_settings', array()),
		generate_blog_get_defaults());
	
	if (!is_singular() && !$settings['comments'])
	{
		$css .= '.blog footer.entry-meta, .archive footer.entry-meta {display: none;}';
	}
	if (is_singular() && !$settings['single_post_navigation'])
	{
		$css .= '.single footer.entry-meta {display: none;}';
	}
	
	add_action('wp_head', function() use($css)
	{
		echo("<style>$css</style>");
	});
});

上記コードはGeneratePressの有料ライセンスのファイル(gp-premium\blog\functions\generate-blog.php)を参考に書きました。見様見真似の怪しいコードですが…
$settings = ... の部分でカスタマイズ設定を取得してentry-metaの表示を制御しています。
例えばカテゴリなら$settings['categories']、個別ページでは$settings['single_categories']で表示設定を取得できます。

今回はコメントやページ送りの表示設定に応じてentry-metaが非表示になる、という動作です。
本来ならヘッダー側も処理を書くべきですが、当ブログでは日付を常時表示しているのと、あと疲れたので妥協しました。

という訳で長くなりましたが、以上で完了となります。
カテゴリなどの位置変更はフィルターが用意されていたので、後半のentry-meta非表示についてもそのうち公式で対応してくれるようになるかもしれませんね。そうなるといいな!