Wordpress 分類目錄的自定義排序

在前端展示中,我們頁面或者是菜單里有許多的分類目錄。然后點擊分類目錄,進(jìn)入到我們想看的分類里。但是管理這些分類目錄的先后順序 Wordpress 并不支持,但是我們有需求,把 ABC 三個分類做先后排序、這里簡單 demo 記錄下。


  1. 后臺管理需要添加一個自定義字段,來記錄排序值。
    需要用到鉤子category_edit_form_fields / category_add_form_fields 和函數(shù)update_term_meta
    在當(dāng)前主題下的 functions.php 里掛上自己的表單
// 分類編輯字段  這個函數(shù)名可以隨意更改,但是需要和鉤子里寫的一致。
function mbt_edit_category_field($tag)
{
    echo '<tr class="form-field"> 
    <th scope="row"><label for="cat-num">排序</label></th> 
    <td> 
    <input name="_term_order" id="cat-num" type="text" value="';
    // echo (!empty($tag->term_group)) ? $tag->term_group : '0';
    echo (get_term_meta( $tag->term_id, 'cate_order', true )) ? get_term_meta( $tag->term_id, 'cate_order', true ) : 0;
    echo '" size="40"/><br> 
    <span class="cat-num">' . $tag->name . ' 的專題排序</span> 
    </td> 
    </tr>';
}
// category_edit_form_fields 意思就是在創(chuàng)建分類字段的時候, 需要執(zhí)行 mbt_edit_category_field 這個函數(shù)。
add_action('category_edit_form_fields', 'mbt_edit_category_field', 10, 2);
  1. 后臺表單添加好了,但是需要把表單提交的信息寫到數(shù)據(jù)表里。
    就用到了另外一個鉤子edited_category / created_category
// 保存數(shù)據(jù) 。方法名不唯一,但是需要和鉤子里的一致。
function mbt_taxonomy_metadate($term_id)
{
    // add_term_meta();
    update_term_meta($term_id, 'cate_order', $_POST['_term_order']);
    // 雖然要兩個鉤子,但是我們可以兩個鉤子使用同一個函數(shù) , 這是. 
    因為 update_term_meta 的特有機(jī)制,有則更新,無則插入。
}
    add_action('created_category', 'mbt_taxonomy_metadate', 10, 1);
    add_action('edited_category', 'mbt_taxonomy_metadate', 10, 1);
  1. 下面就是需要查詢的時候,運(yùn)用上我們的排序字段 cate_order 了。
$args = array(
            'taxonomy' => 'category',  // 根據(jù)你的分類模塊填寫,不一定是 category
            'orderby' => 'meta_value_num', // 指定排序字段是 meta_value 里的值
            'order' => 'DESC', // 倒敘
            'hide_empty' => $hide_empty,
            'hierarchical' => 1,
            'parent' => $term_id, // 分類id
            'meta_query' => array( // 下面的查詢條件就像是 mysql 的 join
                'relation' => 'AND',
                array(
                    'relation' => 'OR',
                    array(
                        'key' => 'cate_order',  // 這里指定用哪個meta_key
                        'type' => 'NUMERIC', 
                    ), array(
                      // 可以看出這個和上面是查詢關(guān)系是 OR 
                      // 考慮到我們新增分類排序的時候,已經(jīng)有很多分類了,
                      // 但是都沒有設(shè)置 cate_order 這個排序字段信息
                     // 如果不加這個判斷,那么沒有排序信息的分類將不會被查出
                      'key'           =>  'cate_order',
                        'compare'      => 'NOT EXISTS', 
                    )
                ),
                // 和分類排序沒有關(guān)系了
                // 演示怎么和分類排序一起。做條件并列過濾。
                array(
                    'key' => 'cate_status',
                    'value' => 'ENABLED'
                ),
            ),
        );
var_dump(get_categories($args));
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容