【问题标题】:get_terms() orderby name is not working - wordpressget_terms() orderby name 不起作用 - wordpress
【发布时间】:2017-12-10 02:22:30
【问题描述】:

我正在使用 wordpress,希望按名称对一级分类术语进行排序,但下面的代码没有给我想要的结果。这是我的代码:

$args = array(
    'taxonomy' => 'tax-category', 
    'hide_empty' => 0,
    'hierarchical' => 1,
    'parent' => 0,
    'orderby'=>'name',
    'order' => 'DESC',
    'fields' => 'all',
);
$rs_terms = get_terms('tax-category', $args);

当我在 php 排序下添加时,它工作得很好。但是想知道为什么wordpress的默认排序不能正常工作:

usort($rs_terms, function($a, $b){
    return strcmp($a->name, $b->name);
});

【问题讨论】:

  • 你试过'order' => 'ASC',而不是DESC?
  • 是同样的错误结果@Ashkar
  • 嗨,它对我有用。
  • 这是对我有用的代码, 'category', 'hide_empty' => 0, 'hierarchical' => 1, 'parent ' => 0, 'orderby'=>'name', 'order' => 'ASC', 'fields' => 'all', ); $rs_terms = get_terms('类别', $args); echo '
    ',print_r($rs_terms,1),'
    '; ?>
  • 我刚刚尝试输入您的代码,但它仍然以错误的方式排序类别名称(即 D、B 但应该是 B、D)@Ashkar

标签: php wordpress custom-taxonomy taxonomy-terms


【解决方案1】:

同样的问题,我确认 Cory 提到的内容,类别顺序和分类术语顺序确实改变了搜索顺序。我可以使用下面的代码解决我的请求删除插件过滤器的问题。

remove_filter('terms_clauses', 'TO_apply_order_filter', 10, 3);

//do your stuff here...

add_filter('terms_clauses', 'TO_apply_order_filter', 10, 3);

【讨论】:

    【解决方案2】:

    用 wpdb 试试

    <?php
    global $wpdb;
    $rs_terms = $wpdb->get_results( "
        SELECT
            t.*
        FROM
            {$wpdb->prefix}term_taxonomy AS tt
        INNER JOIN
            {$wpdb->prefix}terms AS t
            ON t.term_id = tt.term_id
        WHERE
            tt.taxonomy = 'tax-category'
            AND tt.parent = '0'
        ORDER BY
            t.name DESC
    " );
    ?>
    

    【讨论】:

      【解决方案3】:

      在这里出现了同样的问题,就像其他人提到的那样,罪魁祸首是一个与分类排序相关的插件。 Category Order and Taxonomy Terms Order,就我而言。我停用了它,我的条款列表突然出现。

      【讨论】:

      • 这也是我的问题。希望有一种方法可以在不卸载插件的情况下覆盖它。打开关于此问题的支持票:wordpress.org/support/topic/order-terms-by-count
      • 根据这个问题,只需将 'ignore_term_order' => true 添加到您的数组中。为我工作。
      • 您也可以在插件设置页面中关闭“自动排序”。
      • 谢谢!天啊...数小时的搜索一下子就丢失了
      【解决方案4】:

      我遇到了同样的问题。我正在使用插件 Intuitive Custom Post Order,它通过在 WordPress 管理面板中拖放来进行排序。这在 get_terms() 中覆盖了我的“orderby”,所以我从管理面板更改了排序。如果您使用任何类似的插件,它可能会覆盖“orderby”。

      【讨论】:

        【解决方案5】:

        您也可以检查您安装的 PHP 模块。假设您使用的是 PHP 7.x,请确保没有加载 APC 或 APCu 模块。

        php -m | grep -i apc
        

        应该没有输出。

        【讨论】:

          【解决方案6】:

          您的代码应该可以正常工作。我遇到了同样的问题,我在插件中发现了一个改变“orderby”值的钩子。可能是同样的情况。
          我建议你在你的插件/主题中寻找一个与 get_terms() 挂钩的过滤器函数。

          可能的钩子:

          • terms_clauses
          • get_terms_orderby
          • get_terms_args

          编辑:在您扫描钩子之前,您应该尝试将'menu_order' =&gt; false 添加到您的参数中,它可能会为您完成这项工作。有手动拖放排序(menu_order)的分类法,所以你只需要禁用它。

          【讨论】:

            【解决方案7】:

            我刚刚在我的本地主机上测试了你的代码,它可以工作。

                                'orderby'           => 'name', 
                                'order'             => 'ASC',
                                'hide_empty'        => false, 
                                'fields'            => 'all', 
                                'parent'            => 0,
                                'hierarchical'      => true, 
                                'child_of'          => 0,
                                'childless'         => false,
                                'pad_counts'        => false, 
                                'cache_domain'      => 'core'
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-11-07
              • 1970-01-01
              • 1970-01-01
              • 2014-10-21
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多