<?php//独自のCSSファイル（assets/css/）を読み込む場合は true に変更してください. $my_lightning_additional_css=false;if ($my_lightning_additional_css){//公開画面側のCSSの読み込み. add_action('wp_enqueue_scripts',function(){wp_enqueue_style('my-lightning-custom',get_stylesheet_directory_uri() . '/assets/css/style.css',array('lightning-design-style'),filemtime(dirname(__FILE__) . '/assets/css/style.css'))});//編集画面側のCSSの読み込み. add_action('enqueue_block_editor_assets',function(){wp_enqueue_style('my-lightning-editor-custom',get_stylesheet_directory_uri() . '/assets/css/editor.css',array('wp-edit-blocks','lightning-gutenberg-editor'),filemtime(dirname(__FILE__) . '/assets/css/editor.css'))});}//TOPmページのループ文字動かすための関数 add_filter('widget_text','do_shortcode');//全ての投稿タイプで「次の記事」「前の記事」を非表示（浜野） add_filter('lightning_next_prev_options',function($options){$options['display']=false;//前後リンクを完全に非表示 $options['display_image']=false;//念のためサムネイルも非表示 return $options});//FV（青帯）直下に設置：固定ページのスラッグを基準にしたパンくず add_action('lightning_page_header_after','my_kairanban_breadcrumb_below_fv',9);function my_kairanban_breadcrumb_below_fv(){if (! is_singular('kairanban')) return;//=====設定=====$conf=['home_url'=>home_url('/'),'menu_url'=>home_url('/main-menu/'),'support_url'=>home_url('/main-menu/chokai-support/'),'board_url'=>home_url('/main-menu/chokai-support/kairanban/'),//地域別固定ページのベースURL（末尾スラッシュ付き必須） 'area_base'=>home_url('/main-menu/chokai-support/kairanban/'),'area_tax'=>'kairanban__category',//既存タクソノミー（ページ探索のヒントにだけ使う） 'labels'=>['home'=>'TopPage','menu'=>'メインメニュー','support'=>'町会等サポート','board'=>'回覧板',],];//===============$post_id=get_the_ID();$post_title=get_the_title($post_id);//---- 固定ページ探索用ヘルパ ---- $find_area_page=function($base_url,$candidates){///main-menu/chokai-support/kairanban/の「パス部分」を作る $base_path=parse_url(//test02.fujigokoro-furukyo.org/wp-content/themes/lightning-child-sample/$base_url,%20PHP_URL_PATH);$base_path=rtrim($base_path,'/');//末尾スラッシュ除去（get_page_by_pathの都合） foreach (array_unique(array_filter($candidates)) as $slug){$path=ltrim($base_path . '/' . $slug,'/');//先頭にスラッシュ不要 $page=get_page_by_path($path,OBJECT,'page');if ($page instanceof WP_Post){return $page;//最初に見つかった固定ページを採用}}return null;};//1) 主要ターム（ヒント）：ある場合は「固定ページを探すための候補」を作る $area_term=null;if (taxonomy_exists($conf['area_tax'])){$terms=get_the_terms($post_id,$conf['area_tax']);if ($terms && ! is_wp_error($terms)){$area_term=array_shift($terms)}}//2) 一番親のタームを取得（親がいない場合は現在のタームを使用） $root_term=null;if ($area_term){//祖先タームIDを取得 $ancestor_ids=get_ancestors($area_term->term_id,$conf['area_tax'],'taxonomy');if (! empty($ancestor_ids)){//一番親のタームID（配列の最後の要素）を取得 $root_term_id=end($ancestor_ids);$root_term=get_term($root_term_id,$conf['area_tax'])}else{//親がいない場合は現在のタームが一番親 $root_term=$area_term}}//3) 一番親のタームに対応する固定ページを探索 $area_page=null;if ($root_term){$area_page=$find_area_page($conf['area_base'],[ $root_term->slug,sanitize_title($root_term->name),])}//4) 表示用ラベル／URL（固定ページが見つかればそれを正とする） $area_label='';$area_url='';if ($area_page){$area_label=get_the_title($area_page->ID);//固定ページタイトルを表示 $area_url=get_permalink($area_page->ID);//固定ページURLを使用（実スラッグ反映）}elseif ($root_term){//フォールバック：固定ページが未整備でも最低限リンクは出したい場合 $area_label=$root_term->name;$area_url=trailingslashit($conf['area_base'] . sanitize_title($root_term->slug))}$pos=1;?><div id="breadcrumb" class="breadcrumb"><div class="container"><ol class="breadcrumb-list" itemscope itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumb-list__item breadcrumb-list__item--home" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a href="<?php echo esc_url(//test02.fujigokoro-furukyo.org/wp-content/themes/lightning-child-sample/$conf['home_url']); ?>" itemprop="item"><i class="fas fa-fw fa-home"></i><span itemprop="name"><?php echo esc_html($conf['labels']['home']);?></span></a><meta itemprop="position" content="<?php echo (int) $pos++; ?>"></li><li class="breadcrumb-list__item" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a href="<?php echo esc_url(//test02.fujigokoro-furukyo.org/wp-content/themes/lightning-child-sample/$conf['menu_url']); ?>" itemprop="item"><span itemprop="name"><?php echo esc_html($conf['labels']['menu']);?></span></a><meta itemprop="position" content="<?php echo (int) $pos++; ?>"></li><li class="breadcrumb-list__item" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a href="<?php echo esc_url(//test02.fujigokoro-furukyo.org/wp-content/themes/lightning-child-sample/$conf['support_url']); ?>" itemprop="item"><span itemprop="name"><?php echo esc_html($conf['labels']['support']);?></span></a><meta itemprop="position" content="<?php echo (int) $pos++; ?>"></li><li class="breadcrumb-list__item" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a href="<?php echo esc_url(//test02.fujigokoro-furukyo.org/wp-content/themes/lightning-child-sample/$conf['board_url']); ?>" itemprop="item"><span itemprop="name"><?php echo esc_html($conf['labels']['board']);?></span></a><meta itemprop="position" content="<?php echo (int) $pos++; ?>"></li><?php if ($area_label && $area_url) :?><li class="breadcrumb-list__item" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a href="<?php echo esc_url(//test02.fujigokoro-furukyo.org/wp-content/themes/lightning-child-sample/$area_url); ?>" itemprop="item"><span itemprop="name"><?php echo esc_html($area_label);?></span></a><meta itemprop="position" content="<?php echo (int) $pos++; ?>"></li><?php endif;?><li class="breadcrumb-list__item" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><span itemprop="name"><?php echo esc_html($post_title);?></span><meta itemprop="position" content="<?php echo (int) $pos++; ?>"></li></ol></div></div><?php}//既存：kairanbanだけ標準パンくずを抑止 add_filter('lightning_is_breadcrumb',function($is_breadcrumb){if (is_singular('kairanban')){return false}return $is_breadcrumb;},10,1);//カスタム投稿詳細ページのパンクずの上書き（浜野） add_filter('lightning_is_breadcrumb',function($is_breadcrumb){if (is_singular('renraku-chokai')){return false;//標準パンくずは抑止}return $is_breadcrumb;},10,1);function my_renraku_breadcrumb_below_fv(){//← 関数名を変更 if (! is_singular('renraku-chokai')) return;//=====設定=====$conf=['home_url'=>home_url('/'),'menu_url'=>home_url('/main-menu/'),'support_url'=>home_url('/main-menu/chokai-support/'),'board_url'=>home_url('/main-menu/chokai-support/renraku-chokai/'),//地域別固定ページのベース（末尾スラッシュ付きで） 'area_base'=>home_url('/main-menu/chokai-support/renraku-chokai/'),'area_tax'=>'renraku-chokai__category','labels'=>['home'=>'TopPage','menu'=>'メインメニュー','support'=>'町会等サポート','board'=>'町会等からの連絡',//← board キーに統一],];//===============$post_id=get_the_ID();$post_title=get_the_title($post_id);//地域タクソノミーの先頭ターム（＝主要ターム）を取得 $area_term=null;if (taxonomy_exists($conf['area_tax'])){$terms=get_the_terms($post_id,$conf['area_tax']);if ($terms && ! is_wp_error($terms)){$area_term=array_shift($terms)}}//地域ページURL（/…/renraku-chokai/{slug}/） $area_url='';if ($area_term){$slug=sanitize_title($area_term->slug);$area_url=trailingslashit($conf['area_base'] . $slug)}$pos=1;?><div id="breadcrumb" class="breadcrumb"><div class="container"><ol class="breadcrumb-list" itemscope itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumb-list__item breadcrumb-list__item--home" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a href="<?php echo esc_url(//test02.fujigokoro-furukyo.org/wp-content/themes/lightning-child-sample/$conf['home_url']); ?>" itemprop="item"><i class="fas fa-fw fa-home"></i><span itemprop="name"><?php echo esc_html($conf['labels']['home']);?></span></a><meta itemprop="position" content="<?php echo $pos++; ?>"></li><li class="breadcrumb-list__item" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a href="<?php echo esc_url(//test02.fujigokoro-furukyo.org/wp-content/themes/lightning-child-sample/$conf['menu_url']); ?>" itemprop="item"><span itemprop="name"><?php echo esc_html($conf['labels']['menu']);?></span></a><meta itemprop="position" content="<?php echo $pos++; ?>"></li><li class="breadcrumb-list__item" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a href="<?php echo esc_url(//test02.fujigokoro-furukyo.org/wp-content/themes/lightning-child-sample/$conf['support_url']); ?>" itemprop="item"><span itemprop="name"><?php echo esc_html($conf['labels']['support']);?></span></a><meta itemprop="position" content="<?php echo $pos++; ?>"></li><li class="breadcrumb-list__item" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a href="<?php echo esc_url(//test02.fujigokoro-furukyo.org/wp-content/themes/lightning-child-sample/$conf['board_url']); ?>" itemprop="item"><span itemprop="name"><?php echo esc_html($conf['labels']['board']);?></span></a><meta itemprop="position" content="<?php echo $pos++; ?>"></li><?php if ($area_term) :?><li class="breadcrumb-list__item" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a href="<?php echo esc_url(//test02.fujigokoro-furukyo.org/wp-content/themes/lightning-child-sample/$area_url); ?>" itemprop="item"><span itemprop="name"><?php echo esc_html($area_term->name);?></span></a><meta itemprop="position" content="<?php echo $pos++; ?>"></li><?php endif;?><li class="breadcrumb-list__item" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><span itemprop="name"><?php echo esc_html($post_title);?></span><meta itemprop="position" content="<?php echo $pos++; ?>"></li></ol></div></div><?php}//FV（青帯）直下に設置 add_action('lightning_page_header_after','my_renraku_breadcrumb_below_fv',9);//← 関数名を変更 const BREADCRUMB_INFO_ROOT_PATH='info-menu';//情報メニュー親のパス const BREADCRUMB_DEPT_ROOT_PATH='main-menu/department';//各部の活動 親のパス const BREADCRUMB_EXCLUDE_CATS='top';//除外したいカテゴリスラッグ（カンマ区切り可）//追加表示（新規作成時） add_action('category_add_form_fields',function(){wp_nonce_field('cat_page_link_nonce','cat_page_link_nonce');echo '<div class="form-field">
		<label for="breadcrumb_page_id">パンくず用の対応固定ページ</label>';wp_dropdown_pages([ 'name'=> 'breadcrumb_page_id','show_option_none'=> '— 指定なし（自動判定） —','option_none_value'=> '','post_type'=> 'page','selected'=> 0,]);echo '<p class="description">このカテゴリの投稿は、ここで選んだ固定ページ配下としてパンくずに表示されます。</p></div>'});//編集画面 add_action('category_edit_form_fields',function($term){$selected=(int) get_term_meta($term->term_id,'breadcrumb_page_id',true);wp_nonce_field('cat_page_link_nonce','cat_page_link_nonce');echo '<tr class="form-field">
		<th scope="row"><label for="breadcrumb_page_id">パンくず用の対応固定ページ</label></th><td>';wp_dropdown_pages([ 'name'=> 'breadcrumb_page_id','show_option_none'=> '— 指定なし（自動判定） —','option_none_value'=> '','post_type'=> 'page','selected'=> $selected,]);echo '<p class="description">未指定ならスラッグ一致で info-menu / deptaction 配下を自動探索します。</p></td></tr>'});//保存 add_action('created_category','hano_save_cat_page_meta');add_action('edited_category','hano_save_cat_page_meta');function hano_save_cat_page_meta($term_id){if (!isset($_POST['cat_page_link_nonce']) || !wp_verify_nonce($_POST['cat_page_link_nonce'],'cat_page_link_nonce')) return;$val=isset($_POST['breadcrumb_page_id']) ? (int) $_POST['breadcrumb_page_id']:0;if ($val) update_term_meta($term_id,'breadcrumb_page_id',$val);else delete_term_meta($term_id,'breadcrumb_page_id')}//カテゴリから最下層を選び、階層に応じて調整する function hano_pick_deepest_cat($terms){if (empty($terms) || is_wp_error($terms)) return null;$exclude=array_map('trim',explode(',',BREADCRUMB_EXCLUDE_CATS));$exclude=array_map('strtolower',$exclude);$target=null;$max=-1;foreach($terms as $t){if (in_array(strtolower($t->slug),$exclude,true)) continue;$d=count(get_ancestors($t->term_id,'category'));if ($d>$max){$max=$d;$target=$t}}//階層調整：一番親のカテゴリーに応じて適切な階層を返す if ($target){$depth=count(get_ancestors($target->term_id,'category'));//一番親のカテゴリーを取得 $ancestors=get_ancestors($target->term_id,'category');$root_cat_id=!empty($ancestors) ? end($ancestors) :$target->term_id;$root_cat=get_term($root_cat_id,'category');if ($root_cat && !is_wp_error($root_cat)){$root_slug=$root_cat->slug;//main-menu 配下の場合：4階層目（depth=3）→ 3階層目（親）を取得 if ($root_slug==='main-menu' && $depth===3){$parent_id=$target->parent;if ($parent_id){$parent_term=get_term($parent_id,'category');if ($parent_term && !is_wp_error($parent_term)){return $parent_term}}}//info-menu 配下の場合：3階層目（depth=2）→ 2階層目（親）を取得 if ($root_slug==='info-menu' && $depth===2){$parent_id=$target->parent;if ($parent_id){$parent_term=get_term($parent_id,'category');if ($parent_term && !is_wp_error($parent_term)){return $parent_term}}}}//それ以外はそのまま返す}return $target;}//親パス配下から子スラッグのページを検索 function hano_get_child_page_by_slug_path($parent_path,$child_slug){if (!$child_slug) return null;$path=trailingslashit(trim($parent_path,'/')) . sanitize_title($child_slug);$p=get_page_by_path($path,OBJECT,'page');return ($p instanceof WP_Post) ? $p:null}//指定ページの祖先～自身の配列（Homeは含めない） function hano_page_trail_items($page_id){$trail=[];$anc=array_reverse(get_post_ancestors($page_id));foreach($anc as $pid){$trail[]=['url'=>get_permalink($pid),'label'=>get_the_title($pid)]}$trail[]=['url'=>get_permalink($page_id),'label'=>get_the_title($page_id)];return $trail;}//パンくず描画 function hano_render_bc_items(array $items){$pos=1;?> <div id="breadcrumb" class="breadcrumb"><div class="container"> <ol class="breadcrumb-list" itemscope itemtype="https://schema.org/BreadcrumbList"> <?php foreach($items as $i=>$it):?> <li class="breadcrumb-list__item" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"> <?php if (!empty($it['url']) && $i < count($items)-1):?> <a href="<?php echo esc_url(//test02.fujigokoro-furukyo.org/wp-content/themes/lightning-child-sample/$it['url']); ?>" itemprop="item"> <?php if ($i===0):?><i class="fas fa-fw fa-home"></i><?php endif;?> <span itemprop="name"><?php echo esc_html($it['label']);?></span> </a> <?php else:?> <span itemprop="name"><?php echo esc_html($it['label']);?></span> <?php endif;?> <meta itemprop="position" content="<?php echo (int)$pos++; ?>"> </li> <?php endforeach;?> </ol></div></div> <?php}add_action('lightning_page_header_after',function(){if (!is_singular('post')) return;$post_id=get_the_ID();$post_title=get_the_title($post_id);$cat=hano_pick_deepest_cat(get_the_category($post_id));//Home $items=[['url'=>home_url('/'),'label'=>'TopPage']];//まず手動紐づけ（カテゴリ→固定ページ） $page=null;if ($cat){$page_id=(int) get_term_meta($cat->term_id,'breadcrumb_page_id',true);if ($page_id) $page=get_post($page_id)}//無ければ自動探索（スラッグ一致） if (!$page && $cat){$slug=$cat->slug;$page=hano_get_child_page_by_slug_path(BREADCRUMB_INFO_ROOT_PATH,$slug) ?:hano_get_child_page_by_slug_path(BREADCRUMB_DEPT_ROOT_PATH,$slug)}//見つかった固定ページの「親子ツリー」をそのまま展開 if ($page instanceof WP_Post){$items=array_merge($items,hano_page_trail_items($page->ID))}else{//どこにも無い場合のフォールバック（旧仕様） $items[]=['url'=>home_url('/mainmenu/'),'label'=>'メインメニュー'];$items[]=['url'=>home_url('/'. BREADCRUMB_DEPT_ROOT_PATH .'/'),'label'=>'各部の活動'];if ($cat){$items[]=['url'=>home_url('/'. BREADCRUMB_DEPT_ROOT_PATH .'/'. $cat->slug .'/'),'label'=>$cat->name]}}//現在ページ（投稿タイトル） $items[]=['url'=>'','label'=>$post_title];hano_render_bc_items($items);},9);add_filter('lightning_is_breadcrumb',function($is){return is_singular('post') ? false:$is},10,1);$target_post_types=['kairanban','renraku-chokai'];$expiry_meta_key='_expiration-date';//PublishPress Future 用//期限表示フォーマット関数 function show_expiry_date($post_id,$meta_key){$v=get_post_meta($post_id,$meta_key,true);if (!$v) return '—';$ts=is_numeric($v) ? (int)$v:strtotime($v);return $ts ? date_i18n('Y-m-d H:i',$ts):'—'}//列追加＋中身出力 foreach ($target_post_types as $pt){//列見出し add_filter("manage_edit-{$pt}_columns",function($cols){$cols['author']='投稿者';$cols['comments']='コメント';$cols['expiry']='投稿の有効期限';return $cols});//中身 add_action("manage_{$pt}_posts_custom_column",function($col,$post_id) use ($expiry_meta_key){if ($col==='expiry'){echo esc_html(show_expiry_date($post_id,$expiry_meta_key))}},10,2);//ソート可能（任意） add_filter("manage_edit-{$pt}_sortable_columns",function($cols){$cols['expiry']='expiry';return $cols});}//並び替え動作 add_action('pre_get_posts',function($q) use ($target_post_types,$expiry_meta_key){if (!is_admin() || !$q->is_main_query()) return;if ($q->get('orderby') !=='expiry') return;$pt=(array)$q->get('post_type');if (!array_intersect($pt,$target_post_types)) return;$q->set('meta_key',$expiry_meta_key);$q->set('orderby','meta_value_num')});//1) 列の追加（タイトルの右あたりに差し込み） add_filter('manage_pages_columns',function ($columns){$new=[];foreach ($columns as $key=>$label){$new[$key]=$label;if ($key==='title'){$new['slug']='スラッグ'}}return $new;},20);//2) 列の中身を出力（post_name がスラッグ） add_action('manage_pages_custom_column',function ($column_name,$post_id){if ($column_name !=='slug') return;$post=get_post($post_id);if ($post){echo esc_html($post->post_name)}},10,2);//3) ソート可能にする（スラッグで昇順・降順） add_filter('manage_edit-page_sortable_columns',function ($columns){$columns['slug']='slug';return $columns});add_action('pre_get_posts',function ($query){if (!is_admin() || !$query->is_main_query()) return;if ($query->get('post_type') !=='page') return;if ($query->get('orderby')==='slug'){//スラッグ=WP 内部的には 'name' でソート $query->set('orderby','name')}});//固定ページにカテゴリーを追加する(2025.2.6削除)//カテゴリーページで固定ページを表示する(2025.1.29削除)