'...', '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; }