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

/*** REST APIを使って複数のサイトから新着情報を取得して並び替えて表示させる（シンプルリスト） ***/
function haup_rest_api_multi_latest_posts_simple( $atts ) {
//パラメーターの指定
	$atts = shortcode_atts( array(
		'sites' => '', // サイトのURLをカンマ区切りで指定
		'number' => 5, // 取得する投稿数
		'display_count' => 5, // 表示する投稿数
		'order_by' => 'modified', // 並び順（modifiedまたはdate）
		'cache_time' => 3600, // キャッシュの有効期限（秒）
		'datetext' => '0',//日付の接頭辞
		'des' => '',
		'offset' => 0, // オフセット
	), $atts );

//パラメーターが空またはショートコード内にない場合の初期値設定（エラー回避）
	if( empty( $atts['sites'] ) ){ $atts['sites'] = get_home_url(); }//空の場合は自サイトのホームURLをセット
	if( empty( $atts['number'] ) ){ $atts['number'] = '5';}
	if( empty( $atts['display_count'] ) ){ $atts['display_count'] = '5';}
	if( empty( $atts['order_by'] ) ){ $atts['order_by'] = 'modified';}
	if( empty( $atts['cache_time'] ) ){ $atts['cache_time'] = 3600;}
	if( empty( $atts['datetext'] ) ){ $atts['datetext'] = '0';}
	if( empty( $atts['des'] ) ){ $atts['des'] = '';}
	if( empty( $atts['offset'] ) ){ $atts['offset'] = 0;}

//キャッシュキーを生成
	$cache_key = 'ha_rest_simple_latest_posts_' . md5( $atts['sites'] . $atts['number'] . $atts['display_count'] . $atts['order_by'] . $atts['offset'] .$atts['des'] ) ;

//cache_timeが0の場合、キャッシュを削除して再取得
	if ( intval( $atts['cache_time'] ) === 0 ) {
		delete_transient( $cache_key );
	}

// キャッシュを取得
	$cached_posts = get_transient( $cache_key );

	if ( false !== $cached_posts ) {
		$posts = $cached_posts;
	} else {
		$sites = explode( ',', $atts['sites'] );
		$posts = [];

	foreach ( $sites as $site ) {
	// REST APIから新着投稿を取得
		$response = wp_remote_get( esc_url( $site . '/wp-json/wp/v2/posts?per_page=' . $atts['number'] ) );

		if ( is_array( $response ) && ! is_wp_error( $response ) ) {
			$body = json_decode( wp_remote_retrieve_body( $response ), true );
				if ( is_array( $body ) ) {
					foreach ( $body as $post ) {

					// 投稿データを追加
						$posts[] = array(
							'title' => $post['title']['rendered'],
							'description' => $post['excerpt']['rendered'],
							'link' => $post['link'],
							'date' => $post['date_gmt'], // 公開日を追加
							'modified' => $post['modified_gmt'], // 更新日を追加
						);
					}
				}
		}
	}

		// 並び替えの基準を決定
			usort( $posts, function( $a, $b ) use ( $atts ) {
				$key = $atts['order_by'] === 'date' ? 'date' : 'modified';
				return strtotime( $b[$key] ) - strtotime( $a[$key] );
			});

		// 表示する投稿数で制限
			$posts = array_slice( $posts, intval($atts['offset']), intval($atts['display_count']));

		// キャッシュに保存
			set_transient( $cache_key, $posts, intval( $atts['cache_time'] )); // cache_timeを整数に変換
	}

// 投稿を表示
		$output = '<ul class="haup-mapi-simple-list-wrapper">';

	foreach ( $posts as $post ) {//リストの繰り返しここから
		//サイトの日付フォーマットを格納
			$format = get_option( 'date_format' );

		//タイトルを$title_htmlへ格納
			$title_html = '<a href="' . esc_url( $post['link'] ) . '">' . esc_html( $post['title'] ) . '</a>';

		//抜粋を$description_htmlへ格納
			$description_html = $post['description'];
		//抜粋を表示するかどうかをパラメーターから判断して$descriへ格納
		if( $atts['des'] == '0' || empty($atts['des'])){
			$descri = '';
		}else if( $atts['des'] == '1' ){
			$descri = '<a href="' . esc_url( $post['link'] ) . '">' .$description_html . '</a>';
		}else{
			$descri = '';
		}

		//公開日・更新日を$moddate_html $date_htmlへ格納
			$moddate_html = '<a href="' . esc_url( $post['link'] ) . '">' . esc_html( gmdate( $format, strtotime( $post['modified'] ) ) ) . '</a>';
			$date_html = '<a href="' . esc_url( $post['link'] ) . '">' .esc_html( gmdate( $format, strtotime( $post['date'] ) ) ) . '</a>';
		
		//日付の接頭辞を設定
			//文字列
				$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>';
				$mod_tag = '<span class="icon-hauicon-webmark02" style="margin-right:4px;"></span>'; 
			}else{
				$pub_tag = '<span>'.$pub_text.'</span>';
				$mod_tag = '<span>'.$mod_text.'</span>';
			}

		//出力するhtmlをまとめる
			$card_li_class = '<li>';
			$card_inner_div_class = '<div class="haup-mapi-simple-list-inner">';
			$card_content_div_class = '<div class="haup-mapi-simple-list-content">';
			$card_title_div_class = '<div class="haup-mapi-simple-list-title">';
			$card_date_div_class = '<div class="haup-mapi-simple-list-date">';
			$card_description_div_class = '<div class="haup-mapi-simple-list-description">';

		//コンテンツの出力
		$output .= $card_li_class;
		$output .= $card_inner_div_class;
		$output .= $card_content_div_class;
		$output .= $card_title_div_class;
		$output .= $title_html;
		$output .= '</div>';
		$output .= $card_date_div_class;
		$output .= $mod_tag. $moddate_html;
		$output .= ' / ';
		$output .= $pub_tag. $date_html;
		$output .= '</div>';
		$output .= $card_description_div_class;
		$output .= $descri;
		$output .= '</div>';
		$output .= '</div>';
		$output .= '</div>';
		$output .= '</li>';

	}//リストの繰り返しここまで

		$output .= '</ul>';

	return $output;
}
add_shortcode( 'ha-latest-posts-simple', 'haup_rest_api_multi_latest_posts_simple' );