美文网首页
Wordpress 分类目录的自定义排序

Wordpress 分类目录的自定义排序

作者: answer6 | 来源:发表于2022-04-01 10:10 被阅读0次

    在前端展示中,我们页面或者是菜单里有许多的分类目录。然后点击分类目录,进入到我们想看的分类里。但是管理这些分类目录的先后顺序 Wordpress 并不支持,但是我们有需求,把 ABC 三个分类做先后排序、这里简单 demo 记录下。


    1. 后台管理需要添加一个自定义字段,来记录排序值。
      需要用到钩子category_edit_form_fields / category_add_form_fields 和函数update_term_meta
      在当前主题下的 functions.php 里挂上自己的表单
    // 分类编辑字段  这个函数名可以随意更改,但是需要和钩子里写的一致。
    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 意思就是在创建分类字段的时候, 需要执行 mbt_edit_category_field 这个函数。
    add_action('category_edit_form_fields', 'mbt_edit_category_field', 10, 2);
    
    1. 后台表单添加好了,但是需要把表单提交的信息写到数据表里。
      就用到了另外一个钩子edited_category / created_category
    // 保存数据 。方法名不唯一,但是需要和钩子里的一致。
    function mbt_taxonomy_metadate($term_id)
    {
        // add_term_meta();
        update_term_meta($term_id, 'cate_order', $_POST['_term_order']);
        // 虽然要两个钩子,但是我们可以两个钩子使用同一个函数 , 这是. 
        因为 update_term_meta 的特有机制,有则更新,无则插入。
    }
        add_action('created_category', 'mbt_taxonomy_metadate', 10, 1);
        add_action('edited_category', 'mbt_taxonomy_metadate', 10, 1);
    
    1. 下面就是需要查询的时候,运用上我们的排序字段 cate_order 了。
    $args = array(
                'taxonomy' => 'category',  // 根据你的分类模块填写,不一定是 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(
                          // 可以看出这个和上面是查询关系是 OR 
                          // 考虑到我们新增分类排序的时候,已经有很多分类了,
                          // 但是都没有设置 cate_order 这个排序字段信息
                         // 如果不加这个判断,那么没有排序信息的分类将不会被查出
                          'key'           =>  'cate_order',
                            'compare'      => 'NOT EXISTS', 
                        )
                    ),
                    // 和分类排序没有关系了
                    // 演示怎么和分类排序一起。做条件并列过滤。
                    array(
                        'key' => 'cate_status',
                        'value' => 'ENABLED'
                    ),
                ),
            );
    var_dump(get_categories($args));
    

    相关文章

      网友评论

          本文标题:Wordpress 分类目录的自定义排序

          本文链接:https://www.haomeiwen.com/subject/pmzojrtx.html