Woocommerce. Как сделать вывод только определенных меток?
Есть WordPress и Woocommerce. На странице выводятся все метки, принадлежащие всем категориям (по группам, делается сложный запрос в БД). По нажатии на метку, нужно, чтобы отображались метки только тех товаров, которые отобразились по этой метке. Как это можно сделать?
Вот функция c кодом выборки из БД:
function get_terms_in_term( int $term_id, string $term_slug, string $child_term_slug) {
global $wpdb;
$slave_cats = get_term_children($term_id, $term_slug);
$cats = $slave_cats;
$cats[] += $term_id;
$cats[] += $term_id;
$sc .= implode ( ',', $cats );
$key = 'child_' . $child_term_slug . '_by_' . $term_id;
$terms = wp_cache_get( $key );
if ( ! empty( $terms ) ) {
return $terms;
}
//phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery
$terms = $wpdb->get_results(
$wpdb->prepare(
'SELECT DISTINCT t.term_id as term_id, t.name as name
FROM ' . $wpdb->terms . ' as t
LEFT JOIN ' . $wpdb->term_taxonomy . ' as tt ON t.term_id = tt.term_taxonomy_id
LEFT JOIN ' . $wpdb->term_relationships . ' as r ON t.term_id = r.term_taxonomy_id
WHERE tt.taxonomy = %s
AND r.object_id IN (
SELECT DISTINCT p.ID
FROM ' . $wpdb->posts . ' as p
LEFT JOIN ' . $wpdb->term_relationships . ' as r2 ON p.ID = r2.object_id
LEFT JOIN ' . $wpdb->term_taxonomy . ' as t2 ON t2.term_id = r2.term_taxonomy_id
WHERE p.post_type = "product"
AND p.post_status = "publish"
AND t2.taxonomy = %s
AND t2.term_id IN ('.$sc.')
)
ORDER BY name',
$child_term_slug,
$term_slug,
$term_id
)
);
if ( $terms ) {
$terms = array_filter( $terms );
foreach ( $terms as $key => $term ) {
$terms[ $key ]->url = get_term_link( (int)$terms[ $key ]->term_id );
$terms [ $key ]->tid = $term_id;
}
wp_cache_set( 'child_' . $child_term_slug . '_by_' . $term_id, $terms );
}
$div_b = '<div class = "t_h">';
$div_e = '</div>';
$clst = '<span id="more">';
$clfl = False;
for ($i = 0; $i < count($terms); $i++) {
$result .= '<a href="'.$terms[$i]->url.'">'.$terms[$i]->name.'</a> ';
if ( (strlen($result) > 200 ) and (!(strpos($result, $clst))) ) {
$clfl = True;
$result .= '<span id="dots">...<img onclick="myFunction()" id="myBtn" src="/st.png"></span><span id="more">';
}
}
if ($clfl) {
$result .= $result.'</span>';
}
return($div_b.$result.$div_e);
}