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非表示についてもそのうち公式で対応してくれるようになるかもしれませんね。そうなるといいな!

GeneratePressで日付をタイトル前に表示する

唐突ですが、当サイトはGeneratePressというWordPressテーマを利用して作られております。
このテーマは柔軟性が高く、大抵のカスタマイズは視覚的な操作か、簡単なコーディングで済むように設計されているのが特徴です。控えめに言ってとても使いやすい。
とはいえ情報が見つからず苦労することもあったので、自分が行ったカスタマイズについてメモを残しておこうと思います。

まずは日付をタイトルの前に表示したい!というやつです。
デフォルトではタイトルの後に日付、投稿者名と表示されるようになっています。英語圏ではこれが普通なのかもしれませんが、個人的には手前の方がしっくり来ますね。

これを変更するカスタマイズ項目は現時点では見当たらないのでコードを書き加えます。
とはいえGenerate Press側で色々とフックが用意されているので非常に簡単。

add_action('after_setup_theme', function()
{
	remove_action('generate_after_entry_title', 'generate_post_meta');
	add_action('generate_before_entry_title', 'generate_post_meta');
});

これでタイトルの前に日付が表示されるようになるので、後はお好みでスタイルシートを書いて整形すれば完了です。
因みに私の場合、phpやcssの追加にはCode Snippetsプラグインを利用させて頂いております。これも便利!

また、フックに関しては以下の公式ドキュメントが参考になりました。
フック一覧 → https://docs.generatepress.com/collection/hooks/
フックの呼び出し箇所 → https://docs.generatepress.com/article/hooks-visual-guide/

次回は記事下部のカテゴリ&タグを日付と同じ上部に表示する方法について書く予定です。

1536x1536とかいう謎画像サイズ in WordPress 5.3

謎タイトルですみません。
WordPress 5.3が来てたのでアップデートした所、1536x1536と、2048x2048の画像サイズが追加されたようです。
いやお前…2048は分かるけど1536て…1600pxの画像上げた時微妙な気持ちになるやん…
ついでにプラグインが悪さをしているのかと勘違いして小一時間費やしたぞ!

今回のアップデートで大きな画像の投稿に対応したので、恐らくその一環なのでしょう。
この画像サイズはオプションには表示されず、サイズ名は無骨に"1536x1536"など。サイズの変更は許さんぞという気概を感じますね。

ただ申し訳ないけど、1600x900の画像に対して1536x864の画像を作られるのはイヤなので…

add_action('init', function() {
	remove_image_size('1536x1536');
	remove_image_size('2048x2048');
});

サヨウナラしました。すまん。
どうせこのブログで上げる画像は1920x1080が関の山ですし。もし今後必要になったらRegenerate Thumbnailsプラグインとかで生成し直せばよい。

あ、因みにこれやっちゃダメなやつかもしれないし、処理自体もやっちゃダメなコードかもしれないのでご注意を。あくまで自分用の適当な応急処置です。
あと1536は1024+512とかの形で、機械的にはそんなに半端な数字じゃないことに途中で気づきました。遅い。