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

/* 20240427 ショートコードの存在有無が「本文」に限定されることで本文外で使えないので一旦停止 */

function haup_api_post_list_simple_sc( $atts ){
/*** ショートコードパラメーターの設定 ***/
$atts = shortcode_atts(
	array(
		'home_url' => '',
		'posttype' => '',
		'num' => '',
		'offset' => '',
		'cache-second' => '',
		'orderby' => '',
		'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(86400);
	}

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

/*** 投稿データの取得 ***/
/* 20240602 同一コンテンツ内に複数のショートコードがあっても個別にキャッシュを生成するよう修正 */
//一応一日キャッシュを効かせるようにする
//apiを叩く
	//$api_url = $home_url.'/wp-json/wp/v2/'.$posttype.'?per_page='.$per_page;
	$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_simple_cache', $posts, $cache_second );
			set_transient( $cache_key, $posts, $cache_second );
			
		}
	} else {
	//キャッシュがある場合はキャッシュを使用
		$posts = $cached_data;
	}

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

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

/* 取得した分の情報を回す */
if ( ! empty( $posts ) ) {
	foreach ( $posts as $post ) {
		/* 投稿の情報 */
			$output_title = $post['title']['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-simple-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>';

		//出力する情報をまとめる
		$html .= '<li class="ha-api-list-simple-li">';
		$html .= '<h3><a href="'.$output_link.'" target="_blank">'.$output_title.'</a></h3>';
		$html .= '<a href="'.$output_link.'" target="_blank">'.$date_html.'</a>';
		$html .= '</li>';
	}
}

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