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


function haup_api_post_list_card_sc( $atts ){

/*** ショートコードパラメーターの設定 ***/
$atts = shortcode_atts(
	array(
		'home_url' => '',
		'posttype' => '',
		'num' => '',
		'offset' => '',
		'cache-second' => '',
		'orderby' => '',
		'type' => '',
		'des' => '',
		'datetext' => '',
	),$atts);

//トップページのURL
	if(!empty($atts['home_url'])){
		$home_url = esc_url($atts['home_url']);
	}else{
		$home_url = '';
	}

//投稿タイプ
//20240601 post pageが指定された際、posts pagesへ変換しつつ投稿タイプを指定するよう改修
	if(!empty($atts['posttype'])){
		if($atts['posttype'] == 'post'){
			$posttype = esc_html('posts');
		}else if($atts['posttype'] == 'page'){
			$posttype = esc_html('pages');
		}else{
			$posttype = esc_html($atts['posttype']);
		}
	}else{
		$posttype = esc_html('posts');
	}

//表示数
	if(!empty($atts['num'])){
		$per_page = absint($atts['num']);
	}else{
		$per_page = absint('5');
	}

//取得基準となる日
	if($atts['orderby'] == 'date' || empty($atts['orderby'])){
		$order = esc_attr('date');
	}else if($atts['orderby'] == 'modified'){
		$order = esc_attr('modified');
	}else{
		$order = esc_attr('date');
	}

//オフセット
	if(!empty($atts['offset'])){
		$off = absint($atts['offset']);
	}else{
		$off = absint('0');
	}

//キャッシュ時間
	if(!empty($atts['cache-second']) ){
		$cache_second = absint($atts['cache-second']);
	}else{
		$cache_second = absint(60 * 60 * 24);
	}

//カードタイプ
	if( $atts['type'] =='small' || empty($atts['type']) ){
		$card_type = esc_attr('ha-api-list-card-inner');
		$fimage_type = esc_attr('ha-api-list-card-fimage');
		$card_content = esc_attr('ha-api-list-card-content');
	}else if($atts['type'] =='large'){
		$card_type = esc_attr('ha-api-list-card-inner-large');
		$fimage_type = esc_attr('ha-api-list-card-fimage-large');
		$card_content = esc_attr('ha-api-list-card-content-large');
	}else{
		$card_type = esc_attr('ha-api-list-card-inner');
		$fimage_type = esc_attr('ha-api-list-card-fimage');
		$card_content = esc_attr('ha-api-list-card-content');
	}



//パラメーターの中に含まれがちな「/」を削除する
	$slug = rtrim(ltrim($posttype, '/'), '/');//前後の「/」を削除
	$home_url = rtrim($home_url, '/');//末尾の「/」を削除

/*** 投稿データの取得 ***/
/* 20240602 同一コンテンツ内に複数のショートコードがあっても個別にキャッシュを生成するよう修正 */
//一応一日キャッシュを効かせるようにする
//apiを叩く
	$api_url = $home_url.'/wp-json/wp/v2/'.$posttype.'?per_page='.$per_page.'&offset='.$off.'&orderby='.$order;

//キャッシュキーの生成
//パラメーターの情報をシリアル化して付加
	$cache_key = 'haup_api_post_list_simple_cache_' . md5( serialize( $atts ) );

// データを取得する前に、キャッシュがあるかチェック
	//$cached_data = get_transient( 'haup_api_post_list_simple_cache' );
	$cached_data = get_transient( $cache_key );

	if ( false === $cached_data || $atts['cache-second'] == '0') {
	// キャッシュがない場合、またはcache-secondパラメーダが0のときはAPIからデータを取得
		$response = wp_remote_get( $api_url );
	// 取得した情報を配列に格納
		$posts = json_decode( wp_remote_retrieve_body( $response ), true );

	// データをキャッシュする (デフォルトは一日)
		if($atts['cache-second'] == '0'){
			//cache-secondパラメーターが0だったらキャッシュを削除
			//delete_transient( 'haup_api_post_list_simple_cache' );
			delete_transient( $cache_key );
		}else{
			//cache-secondパラメーターが0以外か、未入力ならキャッシュを追加
			//set_transient( 'haup_api_post_list_card_cache', $posts, $cache_second );
			set_transient( $cache_key, $posts, $cache_second );

		}
	} else {
	//キャッシュがある場合はキャッシュを使用
		$posts = $cached_data;
	}

/*** リストを出力 ***/
//初期値を設定
	$html = '';

//前後のタグを設定
	$list_before ='<div class="ha-api-list-card-wrapper">';
	$list_after = '</div>';

/* 取得した分の情報を回す */
if ( ! empty( $posts ) ) {
	foreach ( $posts as $post ) {
		/* 投稿の情報 */
			$output_title = $post['title']['rendered'];
			$output_excerpt = $post['excerpt']['rendered'];
			$output_link = $post['link'];

			//日付
			$api_pub_date = $post['date'];
			$formatted_pub_date = wp_date(
				get_option('date_format'),
				strtotime($api_pub_date)
			);

			$api_mod_date = $post['modified'];
			$formatted_mod_date = wp_date(
				get_option('date_format'),
				strtotime($api_mod_date)
			);

			//文字列
			$pub_text = __('Publish Date:','hima-art-utility');
			$mod_text = __('Modified Date:','hima-art-utility');

			//文字かアイコンかの分岐
			if($atts['datetext'] == '1'){
				$pub_tag = '<span class="icon-hauicon-webmark03" style="margin-right:4px;"></span><span>'.$formatted_pub_date.'</span>';
				$mod_tag = '<span class="icon-hauicon-webmark02" style="margin-right:4px;"></span><span>'.$formatted_mod_date.'</span>'; 
			}else{
				$pub_tag = '<span>'.$pub_text.$formatted_pub_date.'</span>';
				$mod_tag = '<span>'.$mod_text.$formatted_mod_date.'</span>';
			}

			//日付のHTMLを生成
			$date_html = '';
			$date_html .= '<p class="ha-api-list-card-date">';
			//$date_html .= '<span>'.$mod_text.$formatted_mod_date.'</span>';
			$date_html .= $mod_tag;
			$date_html .= '<span>&nbsp;/&nbsp;</span>';
			//$date_html .= '<span>'.$pub_text.$formatted_pub_date.'</span>';
			$date_html .= $pub_tag;
			$date_html .= '</p>';


		/* アイキャッチ画像 */
		/* 投稿の情報にある画像のIDを画像のapiに渡して情報を取得 */
		//投稿のアイキャッチ画像のIDを取得
			$featured_media_id = $post['featured_media'];
		// アイキャッチ画像のURLを取得
			$image_url = '';

		//キャッシュキーの生成
		//パラメーターの情報をシリアル化して付加
			$cache_im_key = 'haup_api_post_list_card_image_cache_' . md5( serialize( $atts ) );

		//アイキャッチ画像のIDがあれば画像情報を取得
		if(isset($featured_media_id)){
			//キャッシュデータの確認
			//$cached_data = get_transient( 'haup_api_post_list_card_image_cache' );
			$cached_data = get_transient( $cache_im_key );

			//キャッシュがあるか、パラメーターの値が0かで判断
			if ( false === $cached_data || $atts['cache-second'] == '0') {
				$media_response = wp_remote_get(
					$home_url.'/wp-json/wp/v2/media/'.$featured_media_id
				);
				$media_data = json_decode(
					wp_remote_retrieve_body( $media_response ), true
				);

					if($atts['cache-second'] == '0'){
					//cache-secondパラメーターが0だったらキャッシュを削除
						//delete_transient( 'haup_api_post_list_card_image_cache' );
						delete_transient( $cache_im_key );
					}else{
					//cache-secondパラメーターが0以外か、未入力ならキャッシュを追加
					set_transient(
						$cache_im_key,
						$media_data,
						$cache_second
					);
					}
			}else{
			//キャッシュがあればそれを返す
				$media_data = $cached_data;
			}

			//"medium"サイズの情報を取得
				$medium_size_info = $media_data['media_details']['sizes']['medium'];

			//"medium"サイズのURLと幅・高さを取得
				$medium_size_url = $medium_size_info['source_url'];
				$medium_size_width = $medium_size_info['width'];
				$medium_size_height = $medium_size_info['height'];

			//アイキャッチ画像のHTMLを生成
				$image_data = '<img src="'.$medium_size_url.'" width="'.$medium_size_width.'" height="'.$medium_size_height.'"  alt="">';
		}

//抜粋の表示
	if( $atts['des'] == '0' || empty($atts['des'])){
		$descri = '';
	}else if( $atts['des'] == '1' ){
		$descri = '<p>' . $output_excerpt . '</p>';
	}else{
		$descri = '';
	}

		//出力する情報をまとめる
		//$html .= '<a href="'.$output_link.'" target="_blank">';
		$html .= '<div class="'.$card_type.'">';
		$html .= '<div class="'.$fimage_type.'">';
		$html .= '<a href="'.$output_link.'" target="_blank">'.$image_data.'</a>';
		$html .= '</div>';
		$html .= '<div class="'.$card_content.'">';
		$html .= '<h3><a href="'.$output_link.'" target="_blank">' . $output_title . '</a></h3>';
		$html .= '<a href="'.$output_link.'" target="_blank">'.$date_html.'</a>';
		//$html .= '<p><a href="'.$output_link.'" target="_blank">' . $output_excerpt . '</a></p>';
		$html .= '<a href="'.$output_link.'" target="_blank">'.$descri.'</a>';
		$html .= '</div>';
		$html .= '</div>';
		//$html .= '</a>';
	}
}

/*** HTMLとして出力 ***/
	return $list_before.$html.$list_after;
}
add_shortcode('ha-apipostlist-card','haup_api_post_list_card_sc');

