GET_TERMS按名称排序为数字

时间:2013-01-10 作者:nepykstu

我有一个自定义分类法,其中填充了诸如“volume 1”、“volume 2”、“issue 1”、“issue 2”、“issue 10”和get\\u terms orderby name返回的列表为:issue 1、issue 10、issue 2,尽管我需要它是issue 1、issue 2、issue 10

我试着搜索wp。stackexchange和使用我的google fu都没有用。任何帮助都将不胜感激。

4 个回复
SO网友:Lalit Arora

我知道这篇文章很老了,但仍然是对其他人的回应。

下面是一个非常简单的过滤器,可以将术语按数字进行排序。您只需设置变量$taxonomy_to_sort 具有taxonomy slug 并将其放入functions.php 你的主题。

add_filter( \'get_terms_orderby\', \'terms_order_as_number\', 10,  3);

function terms_order_as_number($order_by, $args, $taxonomies){

    $taxonomy_to_sort = "numbers";

    if(in_array($taxonomy_to_sort, $taxonomies)){
        $order_by .=  " * 1";
    }

    return $order_by;
}

SO网友:s_ha_dum

如果你四处看看,论坛上有很多类似的帖子。

do not have numbers. 因此,您无法进行数字排序。你必须按字母顺序排序,这样你就能看到你所看到的模式。老实说,我甚至不确定get_terms 支持数字排序(乍一看我认为不是),因为我怀疑许多术语完全是由数字组成的。

你有几个选择。

编写您自己的SQL查询。我认为,但我不确定,您可以在纯SQL中实现这一点,但这将很棘手--您必须substr 术语名称和排序。这将是多毛的,可能不是很有效substr 名称、排序并将其重新组合在一起。这种方法的任何分页都会有问题

SO网友:Walid Ammar

我努力想让它发挥作用,

https://objectiv.co/taking-natural-sort-alphanumeric-wordpress-even/

add_filter(\'get_terms\', \'sort_terms_naturally\', 20, 3);

function sort_terms_naturally ( $terms, $taxonomies, $args ) {
    $taxonomy_to_sort = "pa_size";
    if(in_array($taxonomy_to_sort, $taxonomies) && count($taxonomies) == 1 ){ // just sort natuarly the terms in the sidebar
        $sort_terms = array();

        foreach($terms as $term) {
            $sort_terms[$term->name] = $term;
        }

        uksort( $sort_terms, \'strnatcmp\');

        if ( strtolower($args[\'order\']) == "desc" || true) $sort_terms = array_reverse($sort_terms);

        return $sort_terms;
    }
    return $terms;
}

SO网友:kaiser

问题的根源在哪里

首先,您要求按某个字符串中的部分进行排序。这是no native functionality in any programming language.

其次,您实际的问题不是“按数字排序”,而是您构建这些数字的方式。如果您事先知道这个问题(并考虑到它),那么您可以编写一个过滤器,将这些零填充到您的数字之前。

如何忽视实际问题并加以解决

这并不能真正解决问题,但我们(也许你也一样)不知道你可能会遇到多少“问题”(10、1k、100k?),我们只是在显示时添加排序。下面是供您使用的模板标记:

function wpse80063_numsorted_issues()
{
    $terms  = get_terms( \'issues\', array( /* of possible args */ );
    $digits = strlen( count( $terms ) );
    $sorted_terms = array();
    foreach ( $terms as $term )
    {
        preg_match( "/\\d+/", $term, $nr );
        $nr = sprintf( "%0{digits}d", $nr );
        // If the above line doesn\'t work, take this one:
        // $nr = str_pad( $nr, $digits, "0", STR_PAD_LEFT );
        $sorted_terms[ $nr ] = $term;
    }
    ! empty( $sorted_terms ) AND sort( $sorted_terms );

    return $sorted_terms;
}

结束

相关推荐

使用$TERMS的分层视图的分类下拉列表

我在Wordpress论坛上问过这个问题,但现在没有得到任何回复,我希望我可以在这里问。我找到密码了here 我的代码是:function exc_custom_taxonomy_dropdown( $taxonomy, $orderby, $order, $hierarchical, $show_count, $name) { $args = array( \'orderby\' => \'name\', \'order\' =&g