Starck43
@Starck43
Web разработчик (Python, PHP, SQL + frontend )

Как добавить к запросу основного цикла вывода записей в woocommerce/archive-product.php мета поля?

Я для терминов таксономии 'product_cat' создал при помощи плагина ACF мета поле 'Новинка' и хочу отбирать в цикле все термины с отмеченным мета полем.
Я добавил (для примера) в файл archive-product.php код для проверки того, как меняется запрос основного цикла вывода записей:
$args = array(
		'post_type' => 'product',
		'meta_query' => array(
			array(
					  'key' => 'new_product', // name of custom field
					  'value' => true,
					  'type' => 'numeric',
					  'compare' => 'LIKE'
					)
		)
	);

	global $wp_query;
	$args = array_merge( $wp_query->query, $args );

	query_posts($args);

if ( woocommerce_product_loop() ) {

// родной код вывода термов из content-product
}


Вот новые аргументы запроса:
["product_cat"]=> string(10) "wallpapers" //первоначальная строка запроса
["meta_query"]=> array(1) { 
  [0]=> array(4) { 
      ["key"]=> string(11) "new_product" ["value"]=> int(1) ["type"]=> string(7) "numeric" ["compare"]=> string(4) "LIKE" 
  } 
}


Но после выполнения query_posts() ничего не происходит, выводятся термы прежнего запроса $wp_query.

Есть вариант сформировать запрос иначе, вроде этого, но не уверен, что он подойдет для выборки термов:

function custom_posts_join($join){
 global $wpdb;
 $join .= " LEFT JOIN $wpdb->termmeta as meta_1 ON $wpdb->terms.term_id = meta_1.term_id";
 return $join;
}
add_filter( 'posts_join' , 'custom_posts_join');

function filter_where( $where = '' ) {
       $where .= " AND meta_1.meta_key='new_product' AND meta_1.meta_value=1";
}
add_filter('posts_where', 'filter_where');

Но я не знаю как его применить при выводе записей в шаблоне archive-product.php.

Сразу скажу, что в качестве главного фильтра категорий в магазине я применил плагин Premmerce Woocommerce Product Filter.

Подскажите, можно ли изменить основной цикл и виджет фильтра при этом также корректно работал? Спасибо заранее.
  • Вопрос задан
  • 327 просмотров
Решения вопроса 1
Starck43
@Starck43 Автор вопроса
Web разработчик (Python, PHP, SQL + frontend )
Решение найдено!!! Если кому пригодится, то я нашел хук для переопределения запроса перед выводом категорий:
add_filter( 'woocommerce_product_subcategories_args', 'update_subcategories_args_func',1 );
function update_subcategories_args_func($query) {

	if ($_REQUEST['new_product'] == '1') {
		$args = array(
			'meta_query' => array(
				array(
						  'key' => 'new_product', // name of custom field
						  'value' => 1,
						  'type' => 'numeric',
						 // 'compare' => 'LIKE'
						)
			)
		);
		return wp_parse_args( $args, $query );
	} else return $query;

}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы