シリーズ『WordPressでイベント投稿を作る』~

日付形式のアーカイブページを階層タクソノミーに変更

日付形式のアーカイブページを階層タクソノミーに変更



の改変。

どうせなら、イベントアーカイブも「年」「月」で階層アーカイブにした方が管理しやすいと思い直しまして、以下のように修正です。

register_taxonomy(
	'event_archive',
	'event',
	array(
		'labels'                => $event_archive_labels,
		'hierarchical'          => true,
		'show_ui'               => true,
		'show_admin_column'     => true,
		'show_in_rest'          => true,
		'rest_base'             => 'event_archive',
		'update_count_callback' => '_update_post_term_count',
		'query_var'             => true,
		'rewrite'               => array(
			'slug' => 'event_archive',
		),
	)
);
'hierarchical'          => true,

で、カテゴリーのように親子関係を持つ階層に変更
 
そしてイベント投稿時のアクションも下記のように変更。

function presave_option() {
	global $post;
	if ( 'event' === $post->post_type ) {
		$from_date    = get_post_meta( $post->ID, 'from_date', true );
		$archive_parent_name = date( 'Y年', strtotime( $from_date ) );
		$archive_parent_slug = date( 'Y', strtotime( $from_date ) );
		if ( ! term_exists( $archive_parent_slug, 'event_archive' ) ) {
			wp_insert_term( $archive_parent_name, 'event_archive', $args = array( 'slug' => $archive_parent_slug ) );
		}
		$archive_parent_id = get_term_by( 'slug', $archive_parent_slug, 'event_archive' )->term_id;
		$archive_name = date( 'Y年n月', strtotime( $from_date ) ) . 'のイベント';
		$archive_slug = date( 'Y-n', strtotime( $from_date ) );
		if ( ! term_exists( $archive_slug, 'event_archive' ) ) {
			wp_insert_term( $archive_name, 'event_archive', $args = array( 'slug' => $archive_slug, 'parent' => $archive_parent_id ) );
		}
		wp_delete_object_term_relationships( $post->ID, 'event_archive' );
		wp_set_object_terms( $post->ID, array( $archive_slug ), 'event_archive', true );
	}
}
add_action( 'save_post', 'presave_option', 999 );

 

$archive_parent_name = date( 'Y年', strtotime( $from_date ) );
$archive_parent_slug = date( 'Y', strtotime( $from_date ) );
if ( ! term_exists( $archive_parent_slug, 'event_archive' ) ) {
	wp_insert_term( $archive_parent_name, 'event_archive', $args = array( 'slug' => $archive_parent_slug ) );
}

で親階層にあたる「年」のイベントアーカイブのタームを作成
 

$archive_parent_id = get_term_by( 'slug', $archive_parent_slug, 'event_archive' )->term_id;

で親階層のタームIDを取得
 

wp_insert_term( $archive_name, 'event_archive', $args = array( 'slug' => $archive_slug, 'parent' => $archive_parent_id ) );

で親子関係を付けてタームを追加

です。

今日はここまで

関連する記事



シリーズ『WordPressでイベント投稿を作る』


日付形式のアーカイブページを階層タクソノミーに変更
日付形式のアーカイブページを階層タクソノミーに変更

日付形式のカスタムフィールドを元にどのようなアーカイブページを作るか の改変。 どうせなら、イベントアーカイブも「年」「月」で階層アーカイブにした方が管理しやすいと思い直しまして、以下のように修正です。 register…


こちらはいかが?


1 件のコメント

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*(必須)

*(必須・表示されません)