Вопрос или проблема
Я пытаюсь отобразить связанные продукты с помощью собственного HTML-вывода, к сожалению, я немного растерян относительно того, как это сделать.
WP_Query ниже отображает продукты, которые есть в наличии, я хочу отобразить все связанные продукты одиночного товара, которые есть в наличии, с помощью моего собственного HTML-вывода, но я не могу найти необходимые поля и параметры, если таковые имеются. Я был бы благодарен, если бы кто-то знал, как это сделать.
<?php $args = array(
'post_type' => 'product',
'posts_per_page' => 12,
'tax_query' => array(
array(
'taxonomy' => 'product_visibility',
'field' => 'name',
'terms' => 'outofstock',
'operator' => 'NOT IN',
),
),
);
$loop = new WP_Query( $args );
if ( $loop->have_posts() ) {
while ( $loop->have_posts() ) : $loop->the_post();
wc_get_template_part("templates/my-custom-product-display");
endwhile;
} else {
echo __( 'Продукты не найдены' );
}
wp_reset_postdata();
?>
WooCommerce имеет встроенную функцию, которая делает это за вас, называемую wc_get_related_products()
.
Она вернёт массив идентификаторов продуктов, который вы затем можете использовать в правильном собственном цикле. Я рекомендую избегать использования WP_Query()
и get_posts()
. Посмотрите здесь статью, которую я написал о правильном способе создания пользовательского цикла WooCommerce: https://cfxdesign.com/create-a-custom-woocommerce-product-loop-the-right-way/
Ответ или решение
Для решения задачи по отображению связанных продуктов с использованием пользовательского HTML-вывода в WooCommerce, следует прибегнуть к встроенной функции wc_get_related_products()
. Эта функция предназначена для получения идентификаторов связанных продуктов, что позволит вам создать собственный цикл вывода продуктов, не используя WP_Query()
или get_posts()
.
Шаги по отображению связанных продуктов с пользовательским выводом
-
Получение идентификаторов связанных продуктов: Начните с получения массива идентификаторов связанных продуктов. Для этого вам необходимо передать ID текущего продукта и указать количество обратно возвращаемых связанных товаров.
-
Создание пользовательского цикла вывода: Используйте полученный массив идентификаторов для создания кастомного цикла, который отобразит ваши товары с использованием индивидуального HTML-вывода.
-
Обработка доступности продуктов: Вы можете дополнительно фильтровать только те продукты, которые находятся в наличии, изменяя параметры запроса.
Пример кода
Ниже представлен пример кода, который демонстрирует вышеуказанные шаги:
<?php
// Получаем ID текущего продукта
global $product;
$current_product_id = $product->get_id();
// Получаем массив связанных продуктов
$related_ids = wc_get_related_products($current_product_id, 12); // Получаем до 12 связанных продуктов
if (!empty($related_ids)) {
// Получаем массив объектов продуктов на основе полученных идентификаторов
$related_products = wc_get_products(array(
'include' => $related_ids,
'status' => 'publish',
'limit' => 12,
));
if ($related_products) {
foreach ($related_products as $related_product) {
// Проверяем доступность продукта
if ($related_product->is_in_stock()) {
// Ваш пользовательский HTML вывод для каждого продукта
echo '<div class="related-product">';
echo '<h2>' . esc_html($related_product->get_name()) . '</h2>';
echo $related_product->get_image(); // Изображение продукта
echo '<p>' . esc_html($related_product->get_price_html()) . '</p>'; // Цена продукта
echo '<a href="' . esc_url($related_product->get_permalink()) . '">Просмотреть продукт</a>';
echo '</div>';
}
}
} else {
echo '<p>' . __('Связанные товары не найдены.', 'your-textdomain') . '</p>';
}
} else {
echo '<p>' . __('Связанные товары отсутствуют.', 'your-textdomain') . '</p>';
}
?>
Пояснение кода
-
wc_get_related_products()
: Эта функция получает связанные продукты на основе идентификатора текущего продукта. Она возвращает массив идентификаторов. -
wc_get_products()
: Здесь мы используем массив идентификаторов для получения объектов produktów, что позволяет нам применить фильтр по статусу публикации и количеству. -
is_in_stock()
: Метод проверки наличия продукта, который позволяет избежать показа товаров, находящихся вне склада.
Заключение
Используя приведенный код, вы сможете настроить вывод связанных продуктов с кастомным HTML-выводом, учитывая только те, которые находятся в наличии. Это позволит улучшить ваш пользовательский интерфейс и повысить взаимодействие с клиентами. Убедитесь, что вы адаптируете HTML-разметку под ваши нужды и корпоративный стиль.