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

/* [ha-qrcode]ショートコードでQRコードを示すコンテンツを表示（パソコン表示時のみ） */
/* https://goqr.me/api/doc/create-qr-code/ */
// QRコード出力関数
function haup_get_qrcode_tag() {

$url = get_permalink();
$size = '80';
$title = get_the_title(get_the_ID());

$qrcode_title = __('This page is also viewable on mobile devices','hima-art-utility');
$qrcode_desctiption = __('By reading the QR code on the left, the URL of this page will be displayed and you can easily access it from a mobile environment','hima-art-utility');

	$output = '';
	$output .= '<div class="qr-container" data-nosnippet>';
	$output .= '<ul class="qr-contents">';
	$output .= '<li>';
	$output .= '<img src="https://api.qrserver.com/v1/create-qr-code/?data='.esc_url($url).'&size='.absint($size).'x'.absint($size).'" alt="'.esc_html($title).'" width="80px" height="80px" />';
	$output .= '</li>';
	$output .= '<li>';
	$output .= '<p class="ha-qr-title">'.esc_html($qrcode_title).'</p>';
	$output .= '<p>'.esc_html($qrcode_desctiption).'</p>';
	$output .= '</li>';
	$output .= '</ul>';
	$output .= '</div>';

	// イメージタグを返す
	if(!wp_is_mobile()){
	return $output;
	}else{}
}
add_shortcode('ha-qrcode', 'haup_get_qrcode_tag');

/***** if-loginショートコードでログインユーザーのみにコンテンツを表示 ******/
function haup_if_login_sc_init( $atts, $content = null ) {
if(is_user_logged_in()) {
	$content = do_shortcode( shortcode_unautop( $content ) ); //ショートコードの中にショートコードがあっても実行するようにするコード
	return ''  .$content. '';
} else {
	return '';
}
}
add_shortcode('if-login', 'haup_if_login_sc_init');

/***** if-adminショートコードで管理ユーザーのみにコンテンツを表示 ******/
function haup_admin_show_sc_init( $atts, $content = null ) {
if(current_user_can( 'administrator' )) {
	$content = do_shortcode( shortcode_unautop( $content ) ); //ショートコードの中にショートコードがあっても実行するようにするコード
	return '' . $content . '';
} else {
	return '';
}
}
add_shortcode('if-admin', 'haup_admin_show_sc_init');

/***** ha-mobileショートコードでモバイル表示時のみにコンテンツを表示 *****/
function haup_onlymobile_show_sc_init( $atts, $content = null ) {
if(haup_is_mobile()) {
	$content = do_shortcode( shortcode_unautop( $content ) ); //ショートコードの中にショートコードがあっても実行するようにするコード
	
	return '' . $content . '';
} else {
	return '';
}
}
add_shortcode('ha-mobile', 'haup_onlymobile_show_sc_init');

/***** ha-pcショートコードでパソコン表示時のみコンテンツを表示 *****/
function haup_onlypc_show_sc_init( $atts, $content = null ) {
if(!haup_is_mobile()) {
	$content = do_shortcode( shortcode_unautop( $content ) ); //ショートコードの中にショートコードがあっても実行するようにするコード
	return '' . $content . '';
} else {
	return '';
}
}
add_shortcode('ha-pc', 'haup_onlypc_show_sc_init');

/***** [ha-mdate]で最終更新日を表示 *****/
/* https://www.billerickson.net/code/published-modified-date-shortcode/ */
/* https://ariel-lim.com/blog/show-last-modified-date-wordpress-website/ */
function haup_published_modified_date_shortcode() {
	$date = get_the_date( 'U' );
	$updated = get_the_modified_date();
	$update_time = get_the_modified_time('c');
	$time_class='<time class="entry-date-modified" datetime="'.$update_time.'">';

//最終更新日データのあり・なしで「更新日」「公開日」を表示
//コンテンツ公開と同時に最終更新日が入るようになっていると思うが一応．．
	if(!empty($updated)){
		$output = $time_class . $updated . '</time>';
	}else{
	$output = '<span class="entry-date">' . get_the_date() . '</span>';
	}

	return $output;
}
add_shortcode( 'ha-mdate', 'haup_published_modified_date_shortcode' );

/***** 前のページへ戻る *****/
/** 閲覧履歴がある場合だけ戻るボタンを表示 **/
/** https://lindsay.chunk.jp/wordpress_customize/history-back/ **/
/** https://junpei-sugiyama.com/wordpress-back-btn/ **/
function haup_return_page_button_sc_init(){
//$server_host = $_SERVER['HTTP_HOST'];
if ( isset($_SERVER['HTTP_HOST']) ) {
    $server_host = sanitize_text_field(wp_unslash($_SERVER['HTTP_HOST']));
} else {
    $server_host = ''; // または適切なデフォルト値
}

//$return_url = $_SERVER['HTTP_REFERER'];
if ( isset($_SERVER['HTTP_REFERER']) ) {
	$return_url = sanitize_text_field(wp_unslash($_SERVER['HTTP_REFERER']));
} else {
	$return_url = ''; // または適切なデフォルト値
}

$return_btn_title = __('<< Return to the last viewed page','hima-art-utility');

if (!empty($_SERVER['HTTP_REFERER'])) {
	$referer = sanitize_text_field(wp_unslash($_SERVER['HTTP_REFERER'])); 

	if (strpos($referer, $server_host) !== false) {
		return '<div class="return-btn"><a href="' . esc_url($return_url) . '">' . esc_html($return_btn_title) . '</a></div>';
	}
}
}
add_shortcode('return-page','haup_return_page_button_sc_init');

/***** メールアドレスの難読化 ******/
function haup_mail_obfuscation_shortcode( $atts , $content = null ) {
	$atts = shortcode_atts(array(
	'mail' => '',
	), $atts);

$content = $atts['mail'];

	if(is_email($content)){
		return '' . antispambot( $content  ) . '';
	}else{
		return $content;
	}
}
add_shortcode( 'ha-email', 'haup_mail_obfuscation_shortcode' );


/***** メールリンクの難読化 ******/
function haup_mail_link_obfuscation_shortcode($atts){
	extract(shortcode_atts(array(
	'mail' => '',
	'text' => '',
	'sub' => '',
	), $atts));
	
//ショートコードにパラメーターがないときの処理
if($mail==false){
	$mail='';
}
if($text==false){
	$text=antispambot( $mail );
}

//件名の自動入力
if($sub==true){
	$sub = '?subject='.$sub;
}

	
//正しい処理でないときのメッセージ
$message = __('Please specify a valid email address for the mail parameter','hima-art-utility');
	
//メールアドレスかどうかの判別
if ( is_email( $mail ) ) {
//メールアドレスの場合
	return '<a href="' . esc_url('mailto:' . antispambot( $mail ) ) . $sub . '">' . $text .'</a>';
}else{
//メールアドレスでない場合
	return $message;
}
}
add_shortcode('ha-mail-link', 'haup_mail_link_obfuscation_shortcode');

/*** ha-fieldショートコードでカスタムフィールドの値を表示 ***/
function haup_show_shortcode_field_sc_init($atts){
	extract(shortcode_atts(array(
	'post_id' => '',
	'field' => '',
	'wrap' => '',
	), $atts));
	
	
		if(empty($wrap)){
			$wrap_b = '<span>';
			$wrap_a = '</span>';
		}else{
			$wrap_b = '<'.$atts['wrap'].'>';
			$wrap_a = '</'.$atts['wrap'].'>';			
		}

	if(!empty($field)){
		global $post;
		$post_id = ('' === $post_id) ? $post->ID : $post_id;
		$cf_content = get_post_meta($post_id, $field, true);
		return $wrap_b.$cf_content.$wrap_a;
	}
}
add_shortcode('ha-field', 'haup_show_shortcode_field_sc_init');

/***** 投稿タイプで制限するショートコード *****/
function haup_conditon_postytpe_sc_init($atts, $content = null){
//パラメーターの設定（extractで配列として取得させる）
	$atts = extract(shortcode_atts(
	array(
	'posttype' => 'post',
	),$atts));

//投稿タイプを変数として扱う
	$args = array(
	'posttype' => $posttype,
	);

//パラメーターはあるけど空の場合
	if(empty($posttype)){
		$posttype = 'post';
	}

//投稿タイプの条件をセット
	$post_type_set = is_singular(explode(",",$posttype));

//ショートコードの中にショートコードがあっても実行
	$content = do_shortcode( shortcode_unautop( $content ) );

//パラメーターで指定した投稿タイプでのみショートコード内コンテンツを出力
//未設定の場合は「post(投稿)」のみ
	if($post_type_set){
		return $content;
	}

}
add_shortcode('ha-ptype','haup_conditon_postytpe_sc_init');

/***** 公開日・更新日を和暦込みで表示する *****/
/*** 公開日ショートコード ***/
/* 算出 */
function haup_wareki_publish_date(){
	$date = get_the_time('Ymd');
	$y = get_the_time('Y');
	$m = get_the_time('n');
	$d = get_the_time('j');
//昭和 19261225-19890107
if($date <= 19890107){
	if($date >=19251225 && $date <=19291231){
		$yy = "昭和元";
	}else{
		$yy = "昭和" . ( $y - 1925 );
	}

//平成 19890108-20190430
}elseif($date >=19890108 && $date <=20190430){
	if($date >=19890108 && $date <=19891231){
		$yy = "平成元";
	}else{
		$yy = "平成" . ( $y - 1988 );
}

//令和 20190501-
}elseif($date >=20190501){
	if($date >=20190501 && $date <=20191231){
		$yy = "令和元";
	}else{
		$yy = "令和" . ( $y - 2018 );
	}

}

	return $y.'('.$yy.')年'.$m.'月'.$d.'日' ;
}

/* ショートコード */
function haup_sc_pub_wareki(){
	$pdate = get_the_time('Ymd');
	$mdate = get_the_modified_time('Ymd');
	$update_time = get_the_time('c');
	$time_class='<time class="entry-date-modified" datetime="'.$update_time.'">';
	$time_class_end='</time>';
	$date = haup_wareki_publish_date();
	
	if($pdate > $mdate){
		return $time_class.'<span class="wareki">'.$date.'</span>'.$time_class_end;
	}else{
		return '<span class="wareki">'.$date.'</span>';
	}
}
add_shortcode('p-wareki','haup_sc_pub_wareki');

/*** 最終更新日ショートコード ***/
/* 算出 */
function haup_wareki_modified_date(){
	$date = get_the_modified_time('Ymd');
	$y = get_the_modified_time('Y');
	$m = get_the_modified_time('n');
	$d = get_the_modified_time('j');
//昭和 19261225-19890107
if($date <= 19890107){
	if($date >=19251225 && $date <=19291231){
		$yy = "昭和元";
	}else{
		$yy = "昭和" . ( $y - 1925 );
	}

//平成 19890108-20190430
}elseif($date >=19890108 && $date <=20190430){
	if($date >=19890108 && $date <=19891231){
		$yy = "平成元";
	}else{
		$yy = "平成" . ( $y - 1988 );
}

//令和 20190501-
}elseif($date >=20190501){
	if($date >=20190501 && $date <=20191231){
		$yy = "令和元";
	}else{
		$yy = "令和" . ( $y - 2018 ) ;
	}

}

	return $y.'('.$yy.')年'.$m.'月'.$d.'日' ;
}

/* ショートコード */
function haup_sc_modified_wareki(){
	$pdate = get_the_time('Ymd');
	$mdate = get_the_modified_time('Ymd');
	$update_time = get_the_modified_time('c');
	$time_class='<time class="entry-date-modified" datetime="'.$update_time.'">';
	$time_class_end='</time>';
	$date = haup_wareki_modified_date();

	if($pdate <= $mdate){
		return $time_class.'<span class="wareki">'.$date.'</span>'.$time_class_end;
	}else{
		return '<span class="wareki">'.$date.'</span>';
	}
}
add_shortcode('m-wareki','haup_sc_modified_wareki');

/***** 再利用ブロックをショートコードで出力 *****/
/* from 「Reusable Blocks Extended」Plugin */
/* https://wordpress.org/plugins/reusable-blocks-extended/ */
/* 再利用ブロック内のコンテンツを取得 */
function haup_get_block( $id ) {
	$content_post = get_post( $id );
	$content = $content_post->post_content;
	return $content;
}

/* haup_display_block( 再利用ブロックのID );でテンプレート内出力 */
function haup_display_block( $id ) {
	//echo apply_filters( 'the_content', haup_get_block( $id ) );
	// phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound
	$content = apply_filters( 'the_content', haup_get_block( $id ) );
	return $content;
}

/* ha-reuse-scショートコードで出力 */
function haup_reuse_block_shortcode_init( $atts ){
	extract(shortcode_atts(
		array(
			'id' => ''
	), $atts));
	// phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound
	$content = apply_filters( 'the_content', haup_get_block( $id ) );
	return $content;
}
add_shortcode( 'ha-reuse-sc', 'haup_reuse_block_shortcode_init' );

/***** footer-creditショートコードでフッターのクレジット表示 *****/
/* 最初の投稿年を取得（コピーライト表示に使用） */
function haup_first_post_year() {
	//投稿タイプを「投稿」に指定し、haup_is_single_filterで追加できるようにする
	$posttypes = 'post';
	$posttypes = apply_filters('haup_is_single_filter',$posttypes);
	$posttypes = apply_filters('haup_is_single_footer_credit_filter',$posttypes);
	//20250902 explodeだけでは空文字などがあった場合に不具合が出る可能性があるので修正
	$post_types_array = array_map('trim', explode(',', $posttypes));
	$post_types_array = array_filter($post_types_array);
	//$post_types_array = explode(',', $posttypes);//「,」で投稿タイプを分割

    $args = array(
        'post_type' => $post_types_array,
        'post_status' => 'publish',
        'orderby' => 'date',
        'order' => 'ASC',
        'posts_per_page' => 1
    );

    $query = new WP_Query($args);

    if ($query->have_posts()) {
        $query->the_post();
        $first_post_date = get_the_date('Y', $query->post->ID);
        wp_reset_postdata();
        return $first_post_date;
    } else {
        return 0; // エラー時のデフォルト値などを適切に設定してください
    }
}


/*** フッターへクレジット情報を出力 ***/
function haup_footer_credit_content_init($atts) {
	$atts = extract(shortcode_atts( array(
		'textcolor' => '',
       ), $atts ));

	if(empty($textcolor)){
	$textcolor = '#ffffff';
	}else{
	$textcolor = $textcolor;
}

	$start_year = absint(haup_first_post_year());
	$end_year = absint(gmdate('Y'));
	$home_url = esc_url( home_url( '/' ) );
	$site_title = esc_attr( get_bloginfo( 'name', 'display' ) );
	$site_name = esc_attr(get_bloginfo( 'name' ));
	
return '<div class="copyright" style="text-align:center;color:'.$textcolor.';">
<a style="color:'.$textcolor.';" href="'.$home_url.'" title="'.$site_title.'" rel="home">
©'.$start_year.'-'.$end_year.'  '.$site_name.'</a>
</div>';
}
add_shortcode('footer-credit', 'haup_footer_credit_content_init');

/*** dashiconsのショートコード呼び出し ***/
function haup_dash_icon_font_view($atts){
	$atts = shortcode_atts(
	array(
	'icon' => '',
	'size' => '',
	'color' => '',
	'marginl' => '',
	'marginr' => '',
	'align' => '',
	),$atts);

//パラメーターを変数化
	$size_set = absint($atts['size']);
	$color_set = sanitize_text_field($atts['size']);
	$lmargin_set = absint($atts['marginl']);
	$rmargin_set = absint($atts['marginr']);
	$align_set = sanitize_text_field($atts['align']);

//サイズ指定がなかったとき
if(empty($size_set)){
	$size = 'var(--wp--preset--font-size--medium)';
}else{
	$size = $size_set.'em';
}

//色指定がなかったとき
if(empty($color_set)){
	$color = 'var(--wp--preset--color--foreground)';
}else{
	$color = $color_set;
}

//左マージン指定がなかったとき
if(empty($lmargin_set)){
	$marginl = 'unset';
}else{
	$marginl = $lmargin_set;
}

//右マージン指定がなかったとき
if(empty($rmargin_set)){
	$marginr = 'unset';
}else{
	$marginr = $rmargin_set;
}

//縦位置指定がなかったとき
if(empty($align_set)){
	$align = 'middle';
}else{
	$align = $align_set;
}
	
	$dstyle ='width:revert;height:revert;';
	
	return '<span class="dashicons '.$atts['icon'].'" style="font-size:'.$size.';color:'.$color.';margin-left:'.$marginl.'em;margin-right:'.$marginr.'em;'.$dstyle.'vertical-align:'.$align.';"></span>';
	
}
add_shortcode('dicon','haup_dash_icon_font_view');

/*** 独自アイコンのショートコード呼び出し ***/
function haup_haup_icon_font_view($atts){
	$atts = shortcode_atts(
	array(
	'icon' => '',
	'size' => '',
	'color' => '',
	'align' => '',
	),$atts);

//各パラメーターを変数化
	$font_size = absint($atts['size']);
	$color_set = esc_html($atts['color']);
	$align_set = esc_html($atts['align']);


//サイズ指定がなかったとき
if(empty($font_size)){
	$size = 'var(--wp--preset--font-size--medium)';
}else{
	$size = $font_size.'em';
}

//色指定がなかったとき
if(empty($color_set)){
	$color = 'var(--wp--preset--color--foreground)';
}else{
	$color = $color_set;
}


//縦位置指定がなかったとき
if(empty($align_set)){
	$align = 'unset';
}else{
	$align = $align_set;
}


	return '<span class="'.$atts['icon'].'" style="font-size:'.$size.';color:'.$color.';vertical-align:'.$align.';"></span>';

}
add_shortcode('ha-icon','haup_haup_icon_font_view');

/***** 外部サイトのスクショ *****/
/*https://www.wpbeginner.com/plugins/an-automated-way-of-taking-website-screenshot-in-wordpress/ */
function haup_screenshots_shortcode($atts) {
extract(shortcode_atts(array(
"snap" => 'https://s0.wordpress.com/mshots/v1/',
"url" => 'https://habone.biz',
"alt" => '',
"w" => '800', // width
"h" => '600', // height
"load" => 'lazy',
"title" => ''
), $atts));

if(is_ssl()){
	$snap = $snap;
}else{
	$snap = 'http://s0.wordpress.com/mshots/v1/';
}

if(empty($alt)){
	$alt = $url;
}else{
	$alt = $alt;
}

if(empty($alt)){
	$title = $url;
}else{
	$title = $alt;
}

if(empty($w)){
	$w = '800';
}else{
	$w = $w;
}

if(empty($h)){
	$h = '600';
}else{
	$h = $h;
}

if(empty($load)){
	$load = 'lazy';
}else{
	$load = $load;
}

$img = '
<div class="ha-bshot">
<a href="'.$url.'" target="_blank" rel="noopener noreferrer">
<img loading="'.$load.'" alt="'.$alt.'" src="'.$snap.urlencode(esc_url(rtrim( $url, '/' ))).'?w='.$w.'&h='.$h.'" style="min-height:'.$h.'px;display: block; margin: auto;max-width:100%;object-fit: scale-down;" title="'.$title.'"/>
</a>
</div>
';
 
return $img;

}
add_shortcode('ha-sshot', 'haup_screenshots_shortcode');

/* IEからのアクセス時に警告 */
function haup_ie_access_warning($atts){
global $is_IE;

extract(shortcode_atts(array(
"mes" => ''
), $atts));

if(empty($mes)){
	$message = esc_html(__('Since this site does not support some browsers, the page may not work properly in your environment.','hima-art-utility'));
}else{
	$message = esc_html($mes);
}

	if ($is_IE){
		$iew_content = '<div  data-nosnippet><p class="is-style-ha-para-warning">'.$message.'</p></div>';
	}else{
	$iew_content = '';
	}
	
	return $iew_content;
}
add_shortcode('ha-iew', 'haup_ie_access_warning');

/* CFSのリピーターフィールドショートコード */
function haup_cfs_repeater_shortcode($atts, $content = null) {
		extract(shortcode_atts(array(
			'group' => "",
			'field' => "",
					 ), $atts));
global $cfs;

//ショートコード内のグループとフィールドの値を取得
//null判定を追加(20230811)
if($atts['group'] !== null){
	$fields = $cfs->get($atts['group']);
}
if($atts['field'] !== null){
	$field_param = $atts['field'];
}

//カスタムフィールドが存在するか？
	$custom_fields = get_post_meta( get_the_ID() , $field_param , true );

//カスタムフィールドが存在すれば、リスト形式で出力
if(empty( $custom_fields ) === false){
foreach ($fields as $field) {
	$list_content = $field[$field_param];
	$content .= '<div class="ha-cfs-re-box"><ul>';
	$content .= '<li>'.$list_content.'</li>';
	$content .= '</ul></div>';
}
}

return $content;
}
require_once( ABSPATH . 'wp-admin/includes/plugin.php' );
if (is_plugin_active('custom-field-suite/cfs.php')) {
add_shortcode('ha-cfsre-sc', 'haup_cfs_repeater_shortcode');
}

/*** プライバシーポリシーリンクショートコード ***/
function haup_privacy_policy_link_sc(){
	$pp_link = get_the_privacy_policy_link('<span class="privacy-policy-link-wrapper">', '</span>' );
	
	return $pp_link;
}
add_shortcode('ha-pplink','haup_privacy_policy_link_sc');

/***** 説明文または抜粋文を出力するショートコード *****/
function haup_excerpt_sc(){
$custom_field = esc_html(get_post_meta(get_the_ID(), 'meta_description', true));
$post_excerpt = esc_html(get_the_excerpt(get_the_ID()));

	if(!empty($custom_field)){
		$excerpt = '<div class="ha-post-excerpt">'.$custom_field.'</div>';
	}else{
		$excerpt = '';
	}
	
	if(empty($custom_field) && has_excerpt(get_the_ID())){
		$excerpt = '<div class="ha-post-excerpt">'.$post_excerpt.'</div>';
	}else{
		$excerpt = '';
	}

	return $excerpt;

}
add_shortcode('ha-excerpt','haup_excerpt_sc');

/* 古い投稿であることを知らせる */
function haup_old_post_info_sc($atts){
	$atts = extract(shortcode_atts( array(
		'day' => ''
	), $atts ));
	
	//日数入力がない場合に1095をセット
	if(empty($day)){
		$days = '1095';
	}else{
		$days = $day;
	}

	//経過日数を計算
	$now = gmdate( 'U' );//現在の秒数
	$last = get_the_modified_time( 'U' );//最終更新日の秒数
	$progress = (($now - $last) / 24 / 60 / 60);//日付の差を日数に戻す
	
	//最終更新日を取得
	$mod = get_the_modified_date();
	
	$before = '<aside class="ha-old-post"><p class="is-style-ha-para-notice">';
	$after = '</p></aside>';
	$message_b = esc_html(__('Last updated on this page:','hima-art-utility'));
	$message_a = esc_html(__('  Please note that the information may be out of date.','hima-art-utility'));
	
	
	
		
	if($progress > $days){//日数が日付の差よりも大きい場合
	return $before.$message_b.$mod.$message_a.$after;
	}else{
		return '';
	}
}
add_shortcode('ha-oldpost','haup_old_post_info_sc');

/***** 年齢表示ショートコード *****/
function haup_calculate_age_or_difference_shortcode($atts) {
// ショートコードの引数を取得
	$atts = shortcode_atts(
		array(
			'birthday' => '', // 誕生日
			'dead_day' => '', // 死亡日
			'show_birthday' => 'yes', // 日付を表示する
			'show_months' => 'yes', // 月を表示する
		), $atts);

//デフォルト値の設定
	// 日付を表示する
		if (empty( $atts['show_birthday'] )) {
			$atts['show_birthday'] = 'yes';
		}

	// 月を表示する
		if (empty( $atts['show_months'] )) {
			$atts['show_months'] = 'yes';
		}


// 生年月日が指定されていない場合は空文字を返す
	if (empty($atts['birthday'])) {
		return '';
	}


// 生年月日をDateTimeオブジェクトに変換
	$birthday = DateTime::createFromFormat('Ymd', $atts['birthday']);
	if (!$birthday || $birthday->format('Ymd') !== $atts['birthday']) {
		return '';
	}

// 誕生日の生成
	$formatted_birthday = date_i18n(get_option('date_format'), $birthday->getTimestamp());

// 文字列を変数化
	$year_text = __('Years','hima-art-utility');
	$year_text_b = __('Years-','hima-art-utility');
	$month_text_b = __('Momths-','hima-art-utility');
	$birth_text = __('Date Of Birth:','hima-art-utility');
	$dead_text = __('Date Of Death:','hima-art-utility');

//コンテンツの出力
	if(!empty($atts['dead_day'])) {//没日が入力されている時
		$deadday = DateTime::createFromFormat('Ymd', $atts['dead_day']);
        
		// 死亡日が無効な場合のチェック
			if (!$deadday || $deadday->format('Ymd') !== $atts['dead_day']) {
				return '';
			}

		// 誕生日の生成
			$formatted_deadday = date_i18n(get_option('date_format'), $deadday->getTimestamp());

		// 死亡日までの年月を計算
			$difference = $deadday->diff($birthday);
			$deadyears = $difference->y;
			$deadmonths = $difference->m;

		// 出力するコンテンツをまとめる
		//月表示・誕生日表示パラメーターにより内容を分岐
		if($atts['show_months'] == 'no'){
			$content_age = '-'.$deadyears.$year_text_b;
		}else{
			$content_age = '-'.$deadyears.$year_text.$deadmonths.$month_text_b;
		}

		if($atts['show_birthday'] == 'no'){
			$birthday_content = '';
		}else{
			$birthday_content = $birth_text.$formatted_birthday.' / ';
		}

			$content = '';
			$content .= '<span>';
			$content .= $birthday_content;
			$content .= $dead_text;
			$content .= $formatted_deadday;
			$content .= $content_age;
			$content .= '</span>';

	} else {//没日が入力されていない時

		// 現在の日付を取得
			$now = new DateTime();

		// 年齢を計算
			$age = $now->diff($birthday);
			$years = $age->y;
			$months = $age->m;

		//月表示・誕生日表示パラメーターにより内容を分岐
		if($atts['show_months'] == 'no'){
			$content_age = '-'.$years.$year_text_b;
		}else{
			$content_age = '-'.$years.$year_text.$months.$month_text_b;
		}

		if($atts['show_birthday'] == 'no'){
			$birthday_content = '';
		}else{
			$birthday_content = $birth_text.$formatted_birthday;
		}

		// 出力するコンテンツをまとめる
			$content = '';
			$content .= '<span>';
			$content .= $birthday_content;
			$content .= $content_age;
			$content .= '</span>';
	}

	//コンテンツを返す
	return $content;
}
add_shortcode('ha-calculate-age', 'haup_calculate_age_or_difference_shortcode');

/*** 全体リンクショートコード ***/
// 開始タグ: [ha-cover-link url="https://example.com" target="_blank"]
function haup_full_cover_anchor_shortcode_init($atts, $content = null){
	$a = shortcode_atts([
		'url'    => '#',
		'target' => '_self',
		'rel'    => 'noopener',
		'class'  => '',
	], $atts);

	$target = esc_attr($a['target']);
	$rel  = ($target === '_blank') ? 'noopener noreferrer' : esc_attr($a['rel']);
	$url = esc_url($a['url']);
	$class  = esc_attr($a['class']);

	// do_shortcode($content) を入れることで、中のブロック要素を解析させる
	return sprintf(
		'<a href="%s" target="%s" rel="%s" class="ha-cover-link %s">%s</a>',
		$url,
		$target,
		$rel,
		$class,
		do_shortcode($content)
	);
}
add_shortcode('ha-cover-link','haup_full_cover_anchor_shortcode_init');