使用带有META_QUERY参数的GET_TERMS()

时间:2016-07-02 作者:Luis Martins

我正在尝试构建一个分类查询,以便只显示指定了特定自定义字段值的术语。自定义字段包含布尔值,因此我尝试:

$args = array(
        \'taxonomy\' => \'product_cat\',
        \'hide_empty\' => false,
        \'meta_key\' => \'featured\',
        \'meta_value\' => true
    );
此外:

$args = array(
        \'taxonomy\' => \'product_cat\',
        \'hide_empty\' => false,
        \'meta_query\' => array(
             array(
                \'key\'       => \'featured\',
                \'value\'     => true,
                \'compare\'   => \'=\'
             )
        )
    );
所有这些都没有返回预期结果。我错过了什么?

1 个回复
最合适的回答,由SO网友:birgire 整理而成

当我们添加不存在的术语元时,插入布尔术语元值,例如。

add_term_meta( 123, \'test\', true );
然后,我们实际上正在运行以下插入:

$wpdb->insert( \'wp_termmeta\', array(
   \'term_id\' => 123,
   \'meta_key\' => \'test\',
   \'meta_value\' => true
) );
在一般范围内add_metadata() 作用

现在wpdb::insert() 实际上是wpdb::_insert_replace_helper()准备SQL插入查询并将插入值映射到:

INSERT INTO `wp_termmeta` (`term_id`, `meta_key`, `meta_value`) VALUES (%d, %s, %s)
或者在我们的测试用例中:

INSERT INTO `wp_termmeta` (`term_id`, `meta_key`, `meta_value`) VALUES (123, \'test\', \'1\')
还请注意meta_value 列为wp_termmeta 桌子

所以布尔值true 存储为\'1\' 一串

获取布尔术语元值时get_terms() 使用此类元查询运行:

$args = array(
    \'taxonomy\'   => \'product_cat\',
    \'hide_empty\' => false,
    \'meta_query\' => array(
         array(
            \'key\'       => \'featured\',
            \'value\'     => true,
            \'compare\'   => \'=\'
         )
    )
);
然后,生成的SQL查询包含:

wp_termmeta.meta_key = \'featured\' AND wp_termmeta.meta_value = \'1\' 
其中true (bool)转换为\'1\' (字符串)。

相关推荐

GET_THE_TERMS与wp_GET_POST_TERMS中的奇怪结果

我正在尝试制作一个面包屑函数,但有一个小问题。。。使用时:$categories = get_the_terms( $post->ID, \'product_cat\' ); 我得到了一个循环中使用的类别数组,等等。唯一的问题是它是按字母顺序排列的。(我希望它按层次顺序排列。)经过一番挖掘,我发现了一种替代方法,即使用wp\\u get\\u post\\u terms(),但我肯定遗漏了一些东西,因为当我使用此方法时:$categories = wp_get_post_terms( $p