You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WordPress分类排序报错:sort()参数应为数组而非WP_Term的解决方法

修正WordPress职位分类下拉框的排序错误

我在WordPress中设有名为“Job Title”的分类,希望遍历文章并在下拉选择框中按字母顺序显示职位名称,编写的代码如下:

<select name="jobTitle" id="jobTitleFilter">
    <option value="" selected="selected">Job Title</option>
    <?php foreach ( get_terms( 'job_title',  array() ) as $job_title ) : ?>
        <?php sort( $job_title ); ?>
        <option value="<?php echo esc_html( $job_title->term_id); ?>"><?php echo esc_html( $job_title->name ); ?></option>
    <?php endforeach; ?>
</select>

该代码在PHP 7环境下虽能运行但存在错误,在PHP 8.0.30中触发致命错误:

Fatal error: Uncaught Error: sort(): Argument #1 ($array) must be of type array, WP_Term given in template-partner-job-postings.php on line 26

在PHP 7的Query Monitor中显示错误:

sort() expects parameter 1 to be array, object given

错误原因

你在循环内部对单个WP_Term对象调用了sort()函数,但sort()的作用是排序数组,不能传入对象。PHP 7对此仅抛出警告,而PHP 8的类型检查更严格,直接触发致命错误。

修正方案

方法一:利用get_terms()内置排序参数(推荐)

直接通过get_terms()的参数指定排序规则,无需手动排序,代码更简洁高效:

<select name="jobTitle" id="jobTitleFilter">
    <option value="" selected="selected">Job Title</option>
    <?php 
    // 配置参数,按分类名称字母升序排序
    $job_terms = get_terms( array(
        'taxonomy' => 'job_title',
        'orderby' => 'name',
        'order' => 'ASC',
        'hide_empty' => false, // 可根据需求设置是否隐藏无关联文章的分类,默认值为true
    ) );
    foreach ( $job_terms as $job_title ) : ?>
        <option value="<?php echo esc_html( $job_title->term_id); ?>"><?php echo esc_html( $job_title->name ); ?></option>
    <?php endforeach; ?>
</select>

方法二:手动自定义排序(适用于复杂排序场景)

如果需要更灵活的排序逻辑,可以先获取所有分类项,再用usort()自定义排序规则:

<select name="jobTitle" id="jobTitleFilter">
    <option value="" selected="selected">Job Title</option>
    <?php 
    $job_terms = get_terms( 'job_title', array() );
    // 按分类名称字母升序排序
    usort( $job_terms, function( $term_a, $term_b ) {
        return strcmp( $term_a->name, $term_b->name );
    } );
    foreach ( $job_terms as $job_title ) : ?>
        <option value="<?php echo esc_html( $job_title->term_id); ?>"><?php echo esc_html( $job_title->name ); ?></option>
    <?php endforeach; ?>
</select>

内容的提问来源于stack exchange,提问作者jfc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 00:22:15