Order get_terms by term meta

时间:2016-11-22 作者:Ariel Nonamë

我有一个自定义的分类法,叫做prod cat

我想按编号对模板中的输出进行排序,因此我在分类法中添加了一个term\\u meta,如下所示:

add_action( \'prod-cat_add_form_fields\', \'add_feature_group_field\', 10, 2 );
function add_feature_group_field($taxonomy) {
    ?>
    <div class="form-field term-order-wrap">
        <label for="term-order">Order</label>
        <input type="text" name="wm-cat-prod-order" />
    </div>
    <?php
}
然后:

add_action( \'created_prod-cat\', \'save_feature_meta\', 10, 2 );
function save_feature_meta( $term_id, $tt_id ){
    if( isset( $_POST[\'wm-cat-prod-order\'] ) && \'\' !== $_POST[\'wm-cat-prod-order\'] ){
        add_term_meta( $term_id, \'wm-cat-prod-order\', $_POST[\'wm-cat-prod-order\'], true );
    }
}
我有一个术语\\u meta working,它正在被保存。然后在模板中执行以下操作:

$args = array(
    \'taxonomy\'      =>  \'categoria-de-productos\',
    \'orderby\'       =>  \'wm-cat-prod-order\',
    \'order\'         =>  \'ASC\',
    \'hide_empty\'    =>  false,
    \'hierarchical\'  =>  false,
    \'parent\'        =>  0,
);

$terms = get_terms( $args );
但我无法通过“wm cat prod order”元将其订购。这上面有人吗?谢谢

4 个回复
最合适的回答,由SO网友:Fabian Marz 整理而成

get_terms 支持ameta_query 这需要一个新的WP_Meta_Query 如您所见的参数here. 要使用所需的元查询术语,可以将函数调用更改为以下内容:

$args = array(
  \'taxonomy\' => \'categoria-de-productos\',
  \'orderby\' => \'meta_value_num\',
  \'order\' => \'ASC\',
  \'hide_empty\' => false,
  \'hierarchical\' => false,
  \'parent\' => 0,
  \'meta_query\' => [[
    \'key\' => \'wm-cat-prod-order\',
    \'type\' => \'NUMERIC\',
  ]],
);

$terms = get_terms( $args );
此代码未经测试,可能需要在示例中进行更改。但这些链接应该可以引导您找到解决方案。

SO网友:Danilo Bruno
$args = array(

    \'taxonomy\'      => \'MY_TAX\',
    \'meta_key\'      => \'ordem\',
    \'meta_compare\'  => \'NUMERIC\',
    \'orderby\'       => \'meta_value_num\',
    \'order\'         => \'ASC\',
    \'hide_empty\'    => false,
);

$the_query = new WP_Term_Query($args);

foreach ( $the_query->get_terms() as $term )
{
    ...
}
SO网友:Tessa

我在这方面也很艰难,我用ACF创建了我的元字段。这就是我所做的工作(为了简洁起见删除了一些属性):

$args = array(
    \'taxonomy\'      => \'categoria-de-productos\',
    \'order\'         => \'ASC\',
    \'orderby\'       => \'meta_value_num\',//Treat the meta value as numeric
    \'meta_key\'      => \'wm-cat-prod-order\'//Meta key
);
$terms_query = new WP_Term_Query( $args );
if( ! empty( $terms_query->terms ) ) {
   foreach( $terms_query->terms as $term ) {
      //Do stuff, $term is a WP_Term object
    }
}
我通常会做的一件事是定义一个回退,比如\'meta_value_num term_id\' 使用term_id 如果wm-cat-prod-order 都是一样的,但这完全打破了它,产生了意想不到的结果。只有当\'meta_value_num\' 是的唯一值orderby.

SO网友:Lucas Gabriel

对我来说,我制定了一个自定义分类法,在该自定义分类法中,我有一个自定义元。我想在管理后端有一列,并使其可排序。为了使自定义meta中的自定义分类法具有可排序性,我这样做了。

https://pastebin.com/vr2sCKzX

public function pre_get_terms( $query ) {
$meta_query_args = array(
    \'relation\' => \'AND\', // Optional, defaults to "AND"
    array(
        \'key\'     => \'order_index\',
        \'value\'   => 0,
        \'compare\' => \'>=\'
    )
);
$meta_query = new WP_Meta_Query( $meta_query_args );
$query->meta_query = $meta_query;
$query->orderby = \'position_clause\';
}我在这个链接中找到了答案https://core.trac.wordpress.org/ticket/34996

我只需要修改@eherman24在评论中提供的答案

相关推荐

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