<?php
if (!defined('ABSPATH')) {
    exit;
}

/**
 * Получение связанных статей с учётом категории и (необязательно) тегов.
 *
 * @param int    $category_id     ID категории
 * @param int    $current_post_id ID текущего поста (чтобы исключить его)
 * @param array  $tag_slugs       Опционально: массив слагов тегов для релевантного поиска
 *
 * @return array Массив до 2 статей в формате [['url'=>'...', 'title'=>'...'], ...]
 */
function get_related_articles_from_category($category_id, $current_post_id, $tag_slugs = []) {
    //error_log('Начало функции get_related_articles_from_category. category_id = ' . $category_id . ', current_post_id = ' . $current_post_id);

    // Базовый массив для запроса
    $args = [
        'post_type'      => 'post',
        'post_status'    => 'publish',
        'posts_per_page' => 15,
        'post__not_in'   => [$current_post_id],
        'no_found_rows'  => true, // Чуть эффективнее, если paged не используется
        'ignore_sticky_posts' => true,
        'orderby'        => 'date',
        'order'          => 'DESC',
    ];

    // Если вы хотите поддерживать старый способ через 'cat':
    // (только для обычной категории "category")
    $args['cat'] = $category_id;

    // Если нужен более гибкий подход (категория + теги), используем tax_query:
    if (!empty($tag_slugs)) {
        $args['tax_query'] = [
            'relation' => 'AND', // Можно сменить на 'OR'
            [
                'taxonomy' => 'category',
                'field'    => 'term_id',
                'terms'    => $category_id,
            ],
            [
                'taxonomy' => 'post_tag',
                'field'    => 'slug',
                'terms'    => $tag_slugs,
            ],
        ];
        // В таком случае 'cat' => $category_id не нужен,
        // потому что tax_query уже включает категорию. Но можно оставить.
    }

    //error_log('[get_related_articles_from_category] WP_Query args: ' . print_r($args, true));

    $query = new WP_Query($args);

    $related_articles = [];

    if ($query->have_posts()) {
        $count_found = 0;
        while ($query->have_posts()) {
            $query->the_post();
            $permalink = get_permalink();
            $title     = get_the_title();

            if (!empty($permalink) && wp_http_validate_url($permalink)) {
                $related_articles[] = [
                    'url'   => $permalink,
                    'title' => $title
                ];
                $count_found++;
            }
        }
        wp_reset_postdata();

        //error_log('[get_related_articles_from_category] Постов, удовлетворя условиям, найдено: ' . $count_found);

    } else {
        error_log('[get_related_articles_from_category] Посты в категории ' . $category_id . ' не найдены или не соответствуют условиям.');
    }

    // Берём максимум 2 случайных статьи из массива:
    if (count($related_articles) > 2) {
        $random_keys = array_rand($related_articles, 2);
        $related_articles = [
            $related_articles[$random_keys[0]],
            $related_articles[$random_keys[1]]
        ];
        //error_log('[get_related_articles_from_category] После выбора случайных двух статей: ' . print_r($related_articles, true));
    } else {
        //error_log('[get_related_articles_from_category] Все связанные статьи (до финального return): ' . print_r($related_articles, true));
    }

    return $related_articles;
}
