カスタム投稿を「option」で追加する

ワードプレス

カスタム投稿、タクソノミーの追加方法の例 – 連想配列」の続き。

気軽に追加、削除ができるようになったのはいいけれど、結局サイトごとに関数ファイルを編集するのは気に入らない。

 

ということで、テーマファルに依存しないよう、オプション値で登録しよう、と。

仕掛けが複雑になるのは嫌なので、簡単にテキストエリアでの登録にトライしてみました。

手順1 – カスタム投稿定義用テキストエリアを用意

独自管理画面に、カスタム投稿の定義用テキストエリアを用意します。

この辺は、「管理画面に独自設定ページを追加する」などをご参照ください。

記入例

news,ニュース
q_and_a,Q and A
event,イベント
document,資料
job_information,求人情報
memo,メモ書き
  • オプション名「option_custom_post_types」
  • 一行に「投稿タイプ名(スラッグ),ラベル」をカンマ区切り
  • 投稿タイプごとに改行

手順2 – 関数ファイルに読みこんで宣言

//追加するカスタム投稿タイプ
if ( !function_exists( 'add_post_types' ) ){
	function add_post_types(){
		global $custom_post_types;
		$custom_post_text = get_option( 'option_custom_post_types' );
		$custom_post_text_row = str_replace( array( "\r\n", "\r", "\n" ), "\n", $custom_post_text );
		$custom_post_data_rows = explode( "\n", $custom_post_text_row );
		foreach( $custom_post_data_rows as $custom_post_data_row ){
			$custom_post_lists = explode( ",", $custom_post_data_row );
			$custom_post_name = $custom_post_lists[0];
			$custom_post_label = $custom_post_lists[1];
			if( empty( $custom_post_label ) ){
				$custom_post_label = $custom_post_name;
			}
			$custom_post_types[ $custom_post_name ] = $custom_post_label;
		}
	}
	add_action( 'after_setup_theme', 'add_post_types' );
}

オプション「option_custom_post_types」を読み込み、

改行で分解して配列に代入⇒さらにカンマで分解して連想配列に代入しています。

「CSVを連想配列に変換」などで調べると、もっと安心、簡単な方法が見つかると思いますが、知ってるやり方だけでやってみたかったのでこんな感じに。

追加ループ文には変更無し。

 

エラー処理は、
「ラベルが定義されていなければ、スラッグをラベルに。」
だけ。

先頭/末尾に改行があっても保存時に削除されます。これはテキストエリアの仕様かな?

スラッグとラベル(日本語)を逆に書くと、投稿タイプは追加されません。
エラーも出ませんが、デバッグモードでは警告が出てるかも。

他の入力内容によってはナニカが起きる可能性は高いですが、とりあえずはうまく動いているようです。

 

最近のワードプレスバージョンアップ関連のお知らせで「jsonでサイトをカスタマイズ」的な一文を見かけた気がします。

この記事のような事が出来る、ってことかなー。