- +7(962)141-55-43
- @wpprog
- emel8881
- serj-post@mail.ru
В этой статье я расскажу о решении, которое позволяет вывести товары Woocommerce кастомным шорткодом по запросу. В самом WC есть свои шорткоды для вывода, но они не всегда подходят, особенно если нам нужно добавить какое-либо произвольное поле.
В шорткоде, который мы создадим, можно указать дополнительные параметры, например, количество выводимых записей. Также наш запрос позволяет сортировать выводимые товары по произвольному полю, созданному с помощью плагина Advanced Custom Fields – одному из наиболее распространенных решений для создания произвольных полей.
Данный код проверен и работает на одном из текущих проектов. В нем есть не только формирование шорткода, но и произвольный запрос. В данном случае он выводит требуемое количество товаров. Т.е. если мы напишем шорткод [esa_lprod per=”5″], то он выведет 5 товаров, если укажем шорткод без параметра, то он выведет 12 товаров, как описано на 6 строке кода.
С 39-й по 53 строку формируется запрос товаров, количество, далее указывается сортировка по ACF полю (acf_date_edu). C 40-й по 50-ю строку мы исключаем из запроса товары, которые находятся в категории “Архивные”.
Далее идет сам цикл, который формирует HTML-верстку и выводит товары.
'12', // параметр 1
),
$atts
);
ob_start();
?>
'product',
'posts_per_page' => $params['per'],
'meta_key' => 'acf_date_edu',
'orderby' => 'meta_value',
'order' => 'ASC',
'tax_query' => array(
array(
'taxonomy' => 'product_cat',
'field' => 'slug',
'terms' => array('arhivnye'),
'operator' => 'NOT IN'
)
)
);
$loop = new WP_Query($args);
if ($loop->have_posts()) {
while ($loop->have_posts()) : $loop->the_post();
$categories = get_the_terms($post->ID, 'product_cat'); // получаем категории текущего товара
foreach ($categories as $category) {
$cat_ids = $category->term_id; // товар может находиться в нескольких категориях
}
$link_page_course = get_field('link_page', "category_" . $cat_ids);
$date_course = get_field('acf_date_edu');
?>
-
= the_title(); ?>
' . __('Дата начала: ' . $date_course, 'woocommerce') . '';
} ?>
= __('Подробнее', 'woocommerce'); ?>
О других решениях можно узнать, посетив раздел “Решения” на моем сайте.
2 ответов
Спасибо, хорошая статья!
Рад, что пригодилось) удачи