我有一些代码可以对要在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;
}