Можно расширить Woocommerce [products]
шорткод, чтобы обрабатывать любые пользовательские таксономии, такие как "brand"
с некоторыми хитростями.
Код:
add_filter( 'woocommerce_shortcode_products_query', 'extend_products_shortcode_to_brand', 10, 3 );
function extend_products_shortcode_to_brand( $query_args, $atts, $loop_name ){
if ( ! empty($atts['class']) && strpos($atts['class'], 'brand') !== false ) {
global $wpdb;
$terms = array_map( 'sanitize_title', explode( ',', $atts['class'] ) );
array_shift( $terms );
$terms = implode(',', $terms);
$terms = str_replace(",", "','", $terms);
$ids = $wpdb->get_col( "
SELECT DISTINCT tr.object_id
FROM {$wpdb->prefix}term_relationships as tr
INNER JOIN {$wpdb->prefix}term_taxonomy as tt ON tr.term_taxonomy_id = tt.term_taxonomy_id
INNER JOIN {$wpdb->prefix}terms as t ON tt.term_id = t.term_id
WHERE tt.taxonomy LIKE 'brand' AND t.slug IN ('$terms')
" );
if ( ! empty( $ids ) ) {
if ( 1 === count( $ids ) ) {
$query_args['p'] = $ids[0];
} else {
$query_args['post__in'] = $ids;
}
}
}
return $query_args;
}
Код входит в функциюФайл .php вашей активной дочерней темы (или активной темы).Проверено и работает.
ИСПОЛЬЗОВАНИЕ
Мы будем использовать аргумент шорткода class
здесь:
1) Один бренд - Отображение продуктов от бренда "Apple":
[products limit="8" columns="4" class="brand,Apple"]
2) несколько брендов - Отображение продуктов от брендов "Apple" и "Samsung":
[products limit="8" columns="4" class="brand,Apple,Samsung"]
Итак, класс "brand"
является обязательным и должен быть первым.Каждый термин отделяется от комы.