PHPFixing
  • Privacy Policy
  • TOS
  • Ask Question
  • Contact Us
  • Home
  • PHP
  • Programming
  • SQL Injection
  • Web3.0

Saturday, January 8, 2022

[FIXED] How to hide specific Main Cagtegory and all associated child categories in Wordpress Admin (Backend)

 January 08, 2022     categories, php, wordpress, wp-admin     No comments   

Issue

Im using the following function to hide specific categories from a certain user role in the wp backend edit post / product page. The category ID 330 has multiple child categories. Any idea how to hide the main category (330) and all child categories at once regardless of the amount of child categories?

    /*
     * 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 all of them at once...

enter image description here


Solution

The following code excludes the parent and all child categories.

    /*
     * 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
    }


Answered By - evavienna
  • Share This:  
  •  Facebook
  •  Twitter
  •  Stumble
  •  Digg
Newer Post Older Post Home

0 Comments:

Post a Comment

Note: Only a member of this blog may post a comment.

Total Pageviews

Featured Post

Why Learn PHP Programming

Why Learn PHP Programming A widely-used open source scripting language PHP is one of the most popular programming languages in the world. It...

Subscribe To

Posts
Atom
Posts
Comments
Atom
Comments

Copyright © PHPFixing