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

/*** クエリーループの最終更新順並び替え ***/
/* 投稿テンプレートブロックの「最終更新日順」ボタンがクリックされた時にクエリーを変更 */
/* ブロックエディター上の再現性がない点に注意 */

/* 単一の投稿タイプ */
function haup_desc_moddate_query( $query, $block ) {

	$block = $block->parsed_block;

	if (
		isset( $block['attrs']['className'] )
		&& false !== strpos( $block['attrs']['className'], 'is-style-ha-desc-moddate' )
	) {
		$query['orderby'] = 'modified';
		$query['order'] = 'DESC';
	}

	return $query;
}

add_filter( 'query_loop_block_query_vars', 'haup_desc_moddate_query', 10, 2 );

/* フィルターで複数投稿タイプを指定可能 */
function haup_desc_moddate_query_multi( $query, $block ) {

	$block = $block->parsed_block;
	
	$posttypes = 'post';
	// phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound
	$posttypes = apply_filters('qloop_desc_mdate_posttype_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);//「,」で投稿タイプを分割

	if (
		isset( $block['attrs']['className'] )
		&& false !== strpos( $block['attrs']['className'], 'is-style-ha-desc-moddate-multi' )
	) {
		$query['post_type'] = $posttypes_array; 
		$query['orderby'] = 'modified';
		$query['order'] = 'DESC';
	}

	return $query;
}

add_filter( 'query_loop_block_query_vars', 'haup_desc_moddate_query_multi', 10, 2 );


/* 投稿コンテンツブロックで「更新順（マルチ）」を選んだ時に投稿タイプを指定するフィルターの例 */
/*
function ha_query_loop_multi_posttype_filter(){
	$posttypes = '投稿タイプをコンマ区切りで指定';
	return $posttypes;
}
add_filter( 'qloop_desc_mdate_posttype_filter', 'ha_query_loop_multi_posttype_filter' );
*/

/*** クエリーループを関連投稿に変換 ***/
/* ブロックエディター上の再現性がない点に注意 */
function haup_related_posts_query( $query, $block ) {
	$block = $block->parsed_block;

// 現在の投稿に関連付けられたカテゴリーを取得
	$categories = get_the_category();
	$category_ids = array();

	if ($categories) {
		foreach ($categories as $category) {
			$category_ids[] = $category->cat_ID;
		}
	}

	// 現在の投稿の投稿タイプを取得
	$current_post_type = get_post_type();

	if (
		isset( $block['attrs']['className'] )
		&& false !== strpos( $block['attrs']['className'], 'is-style-haup-related-posts' )
	) {
		$query['post_type'] = array('post', $current_post_type); 
		$query['cat'] = $category_ids;
		$query['orderby'] = 'rand';

		if (!empty($category_ids)) {
			// phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_tax_query
			$query['tax_query'] = array(
				array(
				'taxonomy' => 'category',
				'field'    => 'term_id',
				'terms'    => $category_ids,
				),
			);
		}

	}

	return $query;
}

add_filter( 'query_loop_block_query_vars', 'haup_related_posts_query', 10, 2 );

/*** クエリーループ内の投稿テンプレートに最終更新順ボタンを追加 ***/
function haup_register_block_design_styles_query_loop(){
	//関連投稿を表示
	register_block_style('core/post-template', array(
	'name' =>  'haup-related-posts',
	'label' => __( 'Related Posts','hima-art-utility'),
  ));

	//最終更新日で並び替え
	register_block_style('core/post-template', array(
	'name' =>  'ha-desc-moddate',
	'label' => __( 'DESC Mod Date','hima-art-utility'),
  ));

	//最終更新日で並び替え（フィルターで投稿タイプ指定可能）
	register_block_style('core/post-template', array(
	'name' =>  'ha-desc-moddate-multi',
	'label' => __( 'DESC Mod Date(multi)','hima-art-utility'),
  ));

}
add_action('init','haup_register_block_design_styles_query_loop');