get_terms过滤器导致取消选中类别列表复选框

时间:2018-05-18 09:14:00

标签: wordpress

我有一些代码可以对要在wordpress admin上显示的类别进行排序。它采用允许的类别ID列表,并返回包含这些ID的类别列表。该部分工作得很好,除了在编辑帖子页面上的类别列表中没有选中附加到该帖子的类别(但它们显示在帖子列表页面上)。怎么了?除了那个问题之外,它在管理员的其他任何地方都很有效;(

add_filter( 'get_terms', 'terms_filter', 10, 2);
function terms_filter($terms, $taxes) {
$filteredTerms = [];
if($taxes[0] === "category" || $taxes[0] === "products"){
    global $wpdb;
    $user = wp_get_current_user();
    if($user->exists()){
        $role = $user->roles[0];

        $sql = "    SELECT {$wpdb->prefix}catpermissions.term_id FROM {$wpdb->prefix}catpermissions
                    WHERE role = '$role'
                    UNION
                    SELECT {$wpdb->prefix}term_taxonomy.term_id FROM {$wpdb->prefix}term_taxonomy WHERE taxonomy = 'post_tag'
                    ";
        $cats = $wpdb->get_col($sql);

        for($i = 0; $i < count($terms); $i++){
            if(isIn($terms[$i]->term_id, $cats) ){
                //check if parent is in
                if(!isIn($terms[$i]->parent, $cats) ){
                    $terms[$i]->parent = 0;
                }
                $filteredTerms[] = $terms[$i];
            }
        }
    }
    return $filteredTerms;
}

//check for orphans 
for($i = 0; $i < count($terms); $i++){
    //check if parent is in
    if(!isIn($terms[$i]->parent, $terms) ){
        $terms[$i]->parent = 0;
    }
    $filteredTerms[] = $terms[$i];
}

  return $filteredTerms;
}

0 个答案:

没有答案