Я хотел бы отобразить варианты продукта для некоторых (не всех) переменных продуктов на страницах магазина и категории продуктов на основе настраиваемого поля, которое я планирую добавить к каждому переменному продукту.Чтобы пагинация работала, я могу подключиться к хуку woocommerce_product_query
в WC_Query :: product_query ($ q), но не могу понять, как изменить запрос, чтобы получить то, что мне нужно.
Логика, которую я хочу применить:
//Pseudo-code
$loop = $query->get_all_products // i.e. not just for one page
foreach ( $loop as $product) {
if ($product->is_simple) {
display_simple($product)
} else {
$variations = wc_get_products($product->get_children());
foreach ($variations as $product) {
if ($product->custom_show_on_archive_pages) {
display_variation($product)
}
}
}
}
Проблема с вышеприведенным (кроме псевдокода) заключается в том, что он предполагает, что у нас есть массив с именем $loop
, но на самом деле у нас есть объект запроса.
Мой идеал - изменить запрос так, чтобы он генерировал результаты в соответствии с псевдокодом, и тогда мой шаблон archive-product.php может использовать if / else для отображения простых и переменных продуктов.
Что-то вроде этого в моем functions.php:
add_action( 'woocommerce_product_query', 'show_variable_products');
function show_variable_products( $q ) {
$meta_query = $q->get('meta_query');
// Do something
$q->set('meta_query', $meta_query);
}
Мне интересно, нужно ли мне как-то запустить несколько запросов:
- Исходный запросно отфильтрованы по родительским продуктам
- Дочерние элементы этих родительских продуктов (т. е. вариации) отфильтрованы по тем, с установленным настраиваемым полем
- Исходный запрос, но отфильтрован по простым продуктам
- Слияние (2) и (3)
Возможно ли это?
В качестве альтернативы, есть ли другое решение (не предполагающее покупку плагина)?