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

作成日:

の改変。

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

[php]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',
),
)
);[/php][php]'hierarchical' => true,[/php]で、カテゴリーのように親子関係を持つ階層に変更
 
そしてイベント投稿時のアクションも下記のように変更。[php]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 );[/php] [php]$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 ) );
}[/php]で親階層にあたる「年」のイベントアーカイブのタームを作成
 [php]$archive_parent_id = get_term_by( 'slug', $archive_parent_slug, 'event_archive' )->term_id;[/php]で親階層のタームIDを取得
 [php]wp_insert_term( $archive_name, 'event_archive', $args = array( 'slug' => $archive_slug, 'parent' => $archive_parent_id ) );[/php]で親子関係を付けてタームを追加

です。

物草 灸太郎

WordPressでホームページを制作しつつ、休日は畑を耕したりDIYを楽しんでいます。

コメント

イベントカレンダーを作るには日別イベントアーカイブの作成も必要 – モノグサにお灸 さん
[…] 日付形式のアーカイブページを階層タクソノミーに変更 […]
2019年1月28日 11:50 AM 返信

コメントをどうぞ

  • メールアドレスが公開されることはありません。
  • コメント欄にURLは入力できません。
  • このサイトはreCAPTCHAによって保護されており、Googleのプライバシーポリシー利用規約が適用されます。