新規投稿時にデフォルトのカテゴリやブロックパターンを設定する


概要

リストを投稿するべく投稿画面を開いたときに、あらかじめカテゴリが選ばれ、テンプレートが設定され、ブロックパターンが流し込まれた状態にする。

背景

当サイトではリスト用の投稿タイプを用意していないため、リストを投稿しようと思って投稿画面を開いたとき、いつもカテゴリを list にセットし、リスト投稿用のブロックパターンを選択しています。これが面倒なので自動化を試みました。

内容

add_filter( 'default_content', 'lf_default_content', 10, 2 );
function lf_default_content( $post_content, $post ) {
	$is_newlist = $_GET['newlist'] ?? '';
	if ( $is_newlist ) {
		// カテゴリを list に設定する
		$list_catid = get_category_by_slug( 'list' )->term_id;
		wp_set_post_categories( $post->ID, $list_catid, true );

		// リスト用テンプレートを設定する
		update_post_meta( $post->ID, '_wp_page_template', 'templates/template-cover.php' );

		// リスト投稿のブロックパターンを読み込む
		$bpr = WP_Block_Patterns_Registry::get_instance();
		$bp  = $bpr->get_registered( 'kh/new-list' );
		$post_content = $bp['content'];
	}
	return $post_content;
}

L1: ‘default_content’ は編集画面が開く直前に実行されるフックで、本文に予めコンテンツを流し込んでおくことができます。ちなみにタイトルと抜粋についても類似のフィルターフックが用意されています。

L3: 当サイトではリスト用の投稿タイプを作ったりしていないので、「リストを投稿するべく」編集画面を開いたかどうかを別の方法で検知する必要があります。そこで新規投稿を作成するURLに &newlist=yes のようなパラメータを付与しました。そのリンクからのアクセスであれば、リスト投稿の意思ありとみなします。

L7: 投稿オブジェクトが作られた直後なので第3引数 ($append) はデフォルトの false でよいのですが、将来この処理の手前に何かの処理を挟む可能性もあるので、念のため true に。

Posted by

on

in category