Задача для сильных специалистов по API вордпресс. Глюк с WP_Query

Осман14 лет в сервисе
Данные заказчика будут вам доступны после подачи заявки
18.12.2016

Привет всем, кто разбирается в WP_Query!

Я только начал работать с API вордпресса, поэтому пока не смог решить проблему.

Почему приведенный код работает правильно в шаблоне index.php, т.е. выводит три случайных товара под слайдером на главной https://yadi.sk/i/6ynjEomp33YMeu, но не работает в файле functions.php?

$args = array( 'post_type' => 'product', 'posts_per_page' => 1, 'product_cat' => 'na-glavnuyu', 'orderby' => 'rand' );

$loop = new WP_Query( $args );

while ( $loop->have_posts() ) : $loop->the_post();?>

....

Этот код ни я писал!

Он должен правильно выводить товары из категории  'product_cat' => 'na-glavnuyu', но выводит товары из любых категорий.

Этот же код должен выполняться при обращении по адресу http://avista-optica.ru/?show_rand_products&t=12345 

Обращение на него идет через аякс, и полученные результаты записываются в блок div#rand-products на главной https://yadi.sk/i/6ynjEomp33YMeu

$.ajax

(

{

url: "/?show_rand_products",

cache: false

}

).done

(

function( html )

{

$("#rand-products").html(html);

}

);

Это нужно, чтобы блоки из 3-х товаров на главной (под слайдером) отображаться случайные товары даже при включенном кэше!

Если загружать эти блоки сразу в тело документа без аякса, то случайного отображения товаров не будет, т.к. главная страница будет браться из кэша.

Пока не знаю, как более грамотно работать с аяксом в вордпрессе, поэтому сделал в файле functions.php вот так

if(isset($_GET['show_rand_products'])){show_rand_products(); exit;};

Т.е. при запросе http://avista-optica.ru/?show_rand_products&t=12345  с помощью функции show_rand_products выводим нужные товары, и сразу выходим.

Полный код функции show_rand_products() тут http://codepad.org/Y7F7wTrf