在本站之前的文章中,我推荐过 WordPress 排序插件 Anything Order ,这个插件使用起来很方便,可有时候会和我们使用的其他插件造成冲突。WordPress 4.4 之前,分类项目排序只支持分类项目自有的字段 id、term_id、name、slug 等。WordPress 4.4 为我们带来了分类项目自定义字段 term_meta
的支持,有了这个数据,我们就可以通过添加分类项目自定义字段来进行排序了。下面是具体的方法。
添加分类项目自定义字段输入表单
首先,我们需要添加一个分类项目自定义字段输入表单,添加后,在编辑分类项目的时候,我们会看到如下图中的分类排序输入字段。根据我们的排序需求,从小到大输入数字就可以了。
/**
* 分类项目排序字段
*
* @param Term Object $term
* @param string $taxonomy
*/
add_action( 'category_edit_form_fields', 'term_order_field', 10, 2 );
function term_order_field( $term, $taxonomy ) {
?>
<table class="form-table">
<tbody>
<tr class="form-field">
<th scope="row" valign="top">
<label for="meta-order"><?php _e( '排序' ); ?></label>
</th>
<td>
<input type="text" name="_term_order" size="3" style="width:10%;" value="<?= get_term_meta( $term->term_id, '_term_order', true ); ?>"/>
</td>
</tr>
</tbody>
</table>
<?php
}
/**
* 保存排序
*
* @param int $term_id
*/
add_action( 'edited_category', 'save_term_order' );
function save_term_order( $term_id ) {
update_term_meta( $term_id, '_term_order', $_POST[ '_term_order' ] );
}
调用分类项目时使用自定义字段进行排序
在前段调用分类列表的时候就非常方便了,给 term_terms
函数传入一个包含自定义字段名称、排序方法为 meta_value_num
的数组就可以了。
$args = [
'meta_key' => '_term_order',
'orderby' => 'meta_value_num',
];
$terms = get_terms( 'category', $args );
如果有需要,我们还可以通过 manage_category_custom_column 函数把排序序号在后台的分类列表中显示出来,可以更直观方便的看到分类项目的排序。