Получить термин по произвольной мета-информации термина и таксономии
Как получить термин по произвольной мета-информации термина и таксономии или как отфильтровать tax_query
по мета-данным термина вместо slug
/id
?
function custom_pre_get_posts($query)
{
global $wp_query;
if ( !is_admin() && is_shop() && $query->is_main_query() && is_post_type_archive( "product" ))
{
// Получить термин по мете и таксономии
$term = ???get_term_by_meta_and_taxonomy???('custom_meta_term','my_taxonomy');
$t_id = $term['term_id'];
$tax_query = array
(
array
(
'taxonomy' => 'my_taxoomy',
'field' => 'id',
'terms' => $t_id
)
);
$query->set( 'tax_query', $tax_query );
}
}
add_action( 'pre_get_posts', 'custom_pre_get_posts' );

Попробуйте это:
$args = array(
'hide_empty' => false, // также получить термины, которые еще не используются
'meta_query' => array(
array(
'key' => 'feature-group',
'value' => 'kitchen',
'compare' => 'LIKE'
)
),
'taxonomy' => 'category',
);
$terms = get_terms( $args );

Это должно быть принятым ответом, так как это лучшая практика для данного случая.

Согласен, я подтвердил, что это позволяет получить термин по мета-ключу и значению термина. Убедитесь, что hide_empty установлен в false, если у вашего термина еще нет связанных записей.

Продолжая ответ ilgıt-yıldırım выше, оба выражения get_term_meta
и $key == 'meta_value'
должны содержать $term->term_id
.
Вот полный пример, включая пользовательский запрос $wp_query
:
$term_args = array( 'taxonomy' => 'your-taxonomy' );
$terms = get_terms( $term_args );
$term_ids = array();
foreach( $terms as $term ) {
$key = get_term_meta( $term->term_id, 'term-meta-key', true );
if( $key == 'term-meta-value' ) {
// добавляем ID в массив
$term_ids[] = $term->term_id;
}
}
// Аргументы для цикла
$args = array(
'post_type' => 'posts',
'tax_query' => array(
array(
'taxonomy' => 'your-taxonomy',
'terms' => $term_ids,
),
),
);
// Запрос
$featured = new WP_Query( $args );

Вам нужно пройтись по каждому из терминов в основном условном запросе. Учитывая, что, скорее всего, будет несколько терминов с пользовательскими данными, вам затем нужно передать массив ID в ваш таксономический запрос.
Например, перебор каждого термина для проверки пользовательских метаданных:
$term_args = array(
'taxonomy' => $taxonomy_name,
);
$terms = get_terms( $term_args );
$term_ids = array();
foreach( $terms as $term ) {
$key = get_term_meta( $term->ID, 'meta_key', true );
if( $key == 'meta_value' ) {
// добавляем ID в массив
$term_ids[] = $term->ID;
}
}
В результате вы получите переменную $term_ids, содержащую массив ID терминов, которые вам нужны. Вы можете передать её в ваш таксономический запрос.

get_term_meta( $term->ID, 'meta_key', true );
следует заменить на get_term_meta( $term->term_id, 'meta_key', true );
, так как $term
является объектом WP_Term
.
