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

/*** タグと合致する単語が文章内にある場合に自動登録する（今選択されているものはそのまま保持） ***/
/* https://tsukuriba.co.jp/6333 */
function haup_auto_set_post_tags($post_id, $post) {
    // 自動保存を無視
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return;

    // 投稿タイプを取得
    $post_type = get_post_type($post_id);

	// フィルターを適用して、処理対象の投稿タイプを追加可能にする
	$posttypes = 'post';
	$posttypes = apply_filters('haup_is_single_filter',$posttypes);
	$posttypes = apply_filters('haup_change_auto_tagger_posttype_filter', $posttypes);
	$post_types_array = array_map('trim', explode(',', $posttypes));
	$post_types_array = array_filter($post_types_array);
	//$post_types_array = explode(',', $posttypes);//explodeだけでは不正な文字がある場合に×なので上の2行を使う

	// 指定された投稿タイプ以外は処理を終了
	if (!in_array($post_type, $post_types_array )) {
		return;
	}

	// タグを紐付けるタクソノミーを 'post_tag' に固定
	$taxonomy = 'post_tag';

	// タグを取得
	//$post_tags = get_terms($taxonomy, array('hide_empty' => false));
	//第二引数の使用が非推奨のため以下へ変更 20250908
	$post_tags = get_terms( 
		array(
			'taxonomy'   => $taxonomy,
			'hide_empty' => false,
		) 
	);

	// エラー発生時は処理しない
	if (is_wp_error($post_tags) || !$post_tags) return;

	// 現在のタグを取得
	$current_tags = wp_get_object_terms($post_id, $taxonomy, array('fields' => 'ids'));

	// タグIDを配列で格納
	$set_tag_ids = array();

	// タイトルと投稿本文内のテキストを格納
	$post_text = $post->post_title . ' ' . $post->post_content;

	// 合致するタグを探す
	foreach ($post_tags as $post_tag) {
		// 投稿タイトル＋本文から既存のタグと合致する文字列の出現回数を計算
		$count = substr_count(strtolower($post_text), strtolower($post_tag->name));

		// フィルターを適用して一致する単語の最小回数を取得
		$min_count = apply_filters('haup_change_post_tag_min_count_filter', 3, $post_id, $post_tag);

		// 指定回数以上出現するならタグに追加
		if ($count >= $min_count && !in_array($post_tag->term_id, $current_tags)) {
			$set_tag_ids[] = $post_tag->term_id;
		}
	}

	// タグへ紐づける（登録する）
	if (count($set_tag_ids) > 0) {
		wp_set_object_terms($post_id, array_merge($current_tags, $set_tag_ids), $taxonomy);
	}
}
add_action('save_post', 'haup_auto_set_post_tags', 20, 3);