如何在WordPress Admin(后端)中隐藏特定的主Cagtegory和所有相关的子类别

2022-04-06 00:00:00 categories php wordpress wp-admin

我正在使用以下函数对wp后端编辑帖子/产品页面中的特定用户角色隐藏特定类别。类别ID 330具有多个子类别。你知道如何同时隐藏主类别(330)和所有子类别而不管子类别的数量吗?

    /*
     * Hide Specified Categories (by ID) from shop_manager Role
    */

    add_action( 'admin_init', 'wpse_55202_do_terms_exclusion_shop_manager_role' );
    function wpse_55202_do_terms_exclusion_shop_manager_role() {
        global $current_user;
        // if( current_user_can('editor') ) {
        if ( in_array('shop_manager', $current_user->roles) )
            add_filter( 'list_terms_exclusions', 'wpse_55202_list_terms_exclusions_shop_manager_role', 10, 2 );
        }

    function wpse_55202_list_terms_exclusions_shop_manager_role($exclusions,$args) {
        return $exclusions . " AND ( t.term_id <> 330 )  AND ( t.term_id <> 430 )"; 
    }

一次隐藏全部...


解决方案

以下代码排除父类别和所有子类别。

    /*
     * Hide Specified Categories (by ID) from shop_manager Role
    */
    add_action( 'admin_init', 'wpse_55202_do_terms_exclusion_shop_manager_role' );
    function wpse_55202_do_terms_exclusion_shop_manager_role() {
        global $current_user;
        // if( current_user_can('editor') ) {
        if ( in_array('shop_manager', $current_user->roles) )
            add_filter( 'list_terms_exclusions', 'wpse_55202_list_terms_exclusions_shop_manager_role', 10, 2 );
        }
    function wpse_55202_list_terms_exclusions_shop_manager_role($exclusions,$args) {
        $children_of_parent_cat = implode(',',get_term_children(458,'product_cat')); // get all child categories
        $children_of_parent_cat = (empty($children_of_parent_cat) ? '' : ",$children_of_parent_cat"); // if childs empty or not
        // return $exclusions . " AND (t.term_id NOT IN (458{$children_of_parent_cat}))";
        return $exclusions . " AND (t.term_id NOT IN (458 ".$children_of_parent_cat." ))"; // Exlculde parent and all child cats
    }

相关文章