web-dev-qa-db-ja.com

カスタム用語メタと分類法で用語を取得

カスタムの用語メタと分類法で用語を取得する方法、または代わりに用語メタで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' );
3
Sevi

これを試して:

$args = array(
'hide_empty' => false, // also retrieve terms which are not used yet
'meta_query' => array(
    array(
       'key'       => 'feature-group',
       'value'     => 'kitchen',
       'compare'   => 'LIKE'
    )
),
'taxonomy'  => 'category',
);
$terms = get_terms( $args );
5
Ahmed Ali

上記の 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' ) {
        // Push the ID into the array
        $term_ids[] = $term->term_id;
    }
}

// Loop Args
$args = array(
'post_type' => 'posts',
'tax_query' => array(
    array(
        'taxonomy' => 'your-taxonomy',
        'terms'    => $term_ids,
         ),
    ),
);

// The Query
$featured = new WP_Query( $args );
3
Steven Ryan

メインのクエリ条件の各用語をループする必要があります。カスタムデータに複数の用語が含まれる可能性が高いと想定した場合は、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' ) {
        // Push the ID into the array
        $term_ids[] = $term->ID;
    }
}

そうすると、探している用語IDの配列を含む変数$ term_idsができあがります。あなたはそれをあなたの納税申告書に渡すことができます。

1
edwardr