如何在WordPress中自定义分类法术语排序(无需插件)
无需插件自定义WordPress自定义分类法术语排序的方法
嘿,这个问题我熟!想要不用插件自定义WordPress自定义分类法的术语排序,其实有两个实用的办法,看你需求选就行:
方法一:直接按指定ID顺序返回(适合固定排序场景)
你之前的代码问题出在orderby参数上——当你用include指定ID列表时,把orderby设为'ID'会让WordPress按ID的数值大小排序,而不是你传入的顺序。只要把orderby改成'include',就能让术语严格按照你在include里写的ID顺序排列了!
修正后的代码示例:
$custom_terms = get_terms(array( 'taxonomy' => 'car_listing_tag', 'include' => array(30, 25, 46, 11, 45), // 这里按你想要的顺序填写术语ID 'orderby' => 'include', // 关键参数:按include里的ID顺序排序 'hide_empty' => false, // 可选:如果需要显示没有关联文章的术语,就设为false )); // 循环输出术语 if (!empty($custom_terms) && !is_wp_error($custom_terms)) { echo '<ul>'; foreach ($custom_terms as $term) { echo '<li><a href="' . get_term_link($term) . '">' . $term->name . '</a></li>'; } echo '</ul>'; }
这个方法简单直接,适合排序固定、不需要经常调整的场景。
方法二:添加自定义排序字段(适合灵活调整场景)
如果需要后期在后台可视化调整排序,不用每次改代码,可以给术语添加一个自定义排序字段,通过数字来控制顺序。
步骤1:添加后台排序字段
把下面的代码加到主题的functions.php里,它会在你的car_listing_tag分类法的术语编辑页面添加一个数字输入框:
// 在术语编辑页面添加自定义排序字段 add_action('edit_term_form_fields', 'add_custom_term_order_field', 10, 2); function add_custom_term_order_field($term, $taxonomy) { // 只针对你的自定义分类法 if ($taxonomy !== 'car_listing_tag') return; // 获取已保存的排序值,默认0 $order_value = get_term_meta($term->term_id, 'custom_term_sort_order', true) ?: 0; ?> <tr class="form-field"> <th scope="row"><label for="custom_term_sort_order">排序优先级</label></th> <td> <input type="number" name="custom_term_sort_order" id="custom_term_sort_order" value="<?php echo esc_attr($order_value); ?>" min="0" /> <p class="description">数字越小,术语排序越靠前</p> </td> </tr> <?php } // 保存自定义排序字段的值 add_action('edited_term', 'save_custom_term_order_field', 10, 2); function save_custom_term_order_field($term_id, $taxonomy) { if ($taxonomy !== 'car_listing_tag') return; if (isset($_POST['custom_term_sort_order'])) { update_term_meta( $term_id, 'custom_term_sort_order', intval($_POST['custom_term_sort_order']) ); } }
步骤2:按自定义字段排序获取术语
现在你可以在后台编辑每个car_listing_tag术语,设置排序数字,然后用下面的代码按这个数字排序获取术语:
$sorted_terms = get_terms(array( 'taxonomy' => 'car_listing_tag', 'orderby' => 'meta_value_num', // 按数字类型的自定义字段排序 'meta_key' => 'custom_term_sort_order', // 对应我们添加的字段名 'order' => 'ASC', // 从小到大排序(数字小的在前) 'hide_empty' => false, // 可选:显示空术语 )); // 输出代码和方法一类似,这里就不重复啦
这样后期想要调整排序,直接在后台改数字就行,非常灵活!
内容的提问来源于stack exchange,提问作者mark914
相关产品推荐
相关产品推荐

