<?php if ( !defined( 'ABSPATH' ) ) exit;//PHPの宣言と直接アクセスの拒否

/*** パンくずリスト（個別投稿のみ）のコールバック関数 ***/
/* https://imuza.com/breadcrumbs-without-plugin-definitive-edition/ */
/* 出力関数の設定 */
function haup_get_breadcrumbs( $post_id ) {
	// カテゴリーを取得
	$categories = get_the_category( $post_id );

	// タイトル（翻訳）
	$home_title = esc_html(__('HOME','hima-art-utility'));

	// HTML パンくずリストの開始 (Microdata属性を含む)
	$breadcrumbs = '<div id="breadcrumb"><ol class="haup-breadcrumb-list" itemscope itemtype="https://schema.org/BreadcrumbList">';
	$position = 1; // position は1から開始

	// HTML での Home の表示 (Microdata属性を含む)
	$home_url = esc_url(home_url('/'));
	$breadcrumbs .= '<li class="haup-breadcrumb-item" itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">';
	$breadcrumbs .= '<a href="' . $home_url . '" itemprop="item"><span itemprop="name">' . $home_title . '</span></a>';
	$breadcrumbs .= '<meta itemprop="position" content="' . $position++ . '" />'; // position をここでインクリメント
	$breadcrumbs .= '</li><li class="haup-breadcrumb-separator"> &raquo; </li>';

    // カテゴリーの処理
	if ( ! empty( $categories ) ) {
		$main_category = $categories[0]; // 最初のカテゴリーをメインとして扱う

		// 親カテゴリーの階層を取得
		$category_ancestors = get_ancestors( $main_category->term_id, 'category', 'taxonomy' );
		$category_ancestors = array_reverse( $category_ancestors ); // 最上位の親から順になるように反転

		foreach ( $category_ancestors as $ancestor_id ) {
			$ancestor_cat = get_category( $ancestor_id );
			if ( $ancestor_cat ) {
				$ancestor_link = esc_url( get_category_link( $ancestor_id ) );
				$ancestor_name = esc_html( $ancestor_cat->name );

				// HTML での親カテゴリーの表示 (Microdata属性を含む)
				$breadcrumbs .= '<li class="haup-breadcrumb-item" itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">';
				$breadcrumbs .= '<a href="' . $ancestor_link . '" itemprop="item"><span itemprop="name">' . $ancestor_name . '</span></a>';
				$breadcrumbs .= '<meta itemprop="position" content="' . $position++ . '" />'; // position をここでインクリメント
				$breadcrumbs .= '</li>';
				if (!haup_is_mobile()) {
					$breadcrumbs .= '<li class="haup-breadcrumb-separator"> &raquo; </li>';
				}
			}
		}

		// 現在のカテゴリー（最も近い親）
		$current_category_link = esc_url( get_category_link( $main_category->term_id ) );
		$current_category_name = esc_html( $main_category->name );

		// HTML での現在のカテゴリーの表示 (Microdata属性を含む)
		$breadcrumbs .= '<li class="haup-breadcrumb-item" itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">';
		$breadcrumbs .= '<a href="' . $current_category_link . '" itemprop="item"><span itemprop="name">' . $current_category_name . '</span></a>';
		$breadcrumbs .= '<meta itemprop="position" content="' . $position++ . '" />'; // position をここでインクリメント
		$breadcrumbs .= '</li>';
		if (!haup_is_mobile()) {
			$breadcrumbs .= '<li class="haup-breadcrumb-separator"> &raquo; </li>';
		}
	}

	// 現在の投稿タイトル
	$post_title = '';
    if(!haup_is_mobile()){
		$post_title = esc_html(wp_trim_words(html_entity_decode(get_the_title( $post_id )),30));
	}else{
		$post_title = esc_html(wp_trim_words(html_entity_decode(get_the_title( $post_id )),20));
	}

	// HTML での現在の投稿の表示 (Microdata属性を含む)
	$breadcrumbs .= '<li class="haup-breadcrumb-item" itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">';
	$breadcrumbs .= '<span itemprop="name">' .$post_title. '</span>'; // 現在のページなのでリンクは不要
	$breadcrumbs .= '<meta itemprop="position" content="' . $position++ . '" />'; // position をここでインクリメント
	$breadcrumbs .= '</li>';

	$breadcrumbs .= '</ol></div>';

	if (haup_is_single_without_front()) {
		echo wp_kses_post($breadcrumbs);
	}
}

/* ショートコードで出力 */
function haup_bread_shortcode() {
	ob_start();
	$post_id = get_the_ID(); // 現在の投稿IDを取得
	haup_get_breadcrumbs($post_id);
	return ob_get_clean();
}
add_shortcode('ha-bread', 'haup_bread_shortcode');


/* 本文前に自動挿入 */
function haup_auto_bread_before_content( $content ) {

	$output = do_shortcode( '[ha-bread]' );

	if(haup_is_single_without_front()){
		return $output.$content;
	}else{
		return $content;
	}

}
if(isset( GetOP11_addcontent()['auto_bread_before_content'] ) && GetOP11_addcontent()['auto_bread_before_content']  == 1 ){
add_filter( 'the_content', 'haup_auto_bread_before_content' );
}