I'm trying to add a user_role inside the ATUM stock management plugin. Currently it's only visible to admins, while I also want to add shop_managers. But I just can't succeed in adding it successfully -except if I add it directly in the plugin.

This is where the filter is placed inside the ATUM plugin.

namespace Atum\Components;
class AtumCapabilities {
   private function __construct(){
      $admin_roles = (array) apply_filters( 'atum/capabilities/admin_roles', [ get_role( 'administrator' ) ] );  
      foreach ( $admin_roles as $admin_role ) {

            if ( $admin_role instanceof \WP_Role ) {
                foreach ( $this->capabilities as $cap ) {
                    $admin_role->add_cap( $cap );


And this is the code I have been using. I also tried variations of this, changing the priority or including this in the "init" hook.

add_filter('atum/capabilities/admin_roles', function($roles) {
  $roles[] = get_role('shop_manager');
  return $roles;

Does anyone know how I can add get_role('shop_manager') to the array inside the atum/capabilities/admin_roles filter?


  • Your code looks fine to me. The issue is likely that the original code is only run during plugin activation, because add_cap() should only be run once. Perhaps try deactivating and reactivating ATUM while your filter code is active. Jul 7, 2020 at 15:13
  • @JacobPeattie Just tried it. Unfortunately nothing. When I added the role shop_manager inside the plugin it immediately changes the capabilities, thus is the filter not only run during plugin activation -my guess.
    – photogenic
    Jul 7, 2020 at 15:37
  • You may need to contact the plugin author for assistance, as it's not apparent what the issue is from the information included in the question. My only other thought is that your filter is running too late. Where have you added your code? Jul 7, 2020 at 15:43
  • @JacobPeattie I already wrote the author and they tried to push another plugin on me link. This is what they wrote: "...please make sure you are adding it after ATUM registers its ‘atum/capabilities/admin_roles’ filter or won’t work. So, if this is the problem, you can try to delay it through any other WP hook."
    – photogenic
    Jul 7, 2020 at 15:53

1 Answer 1


I added the capabilities now through this code. I'm not happy with my solution and it would be great if someone could find a proper way to add to the filter. I would be honestly interested to know how to make it properly work.

add_action( 'admin_init', 'jp_add_atum_caps_to_shop_manager');
function jp_add_atum_caps_to_shop_manager() {
    if(!user_can( 217 , 'atum_read_inbound_stock')) {
        $capabilities = array(

                // Purchase price caps.

                // Inbound Stock caps.

                // Out Stock Threshold caps.

                // Settings caps.

                // ATUM menus caps.

                // Other caps.

        // Add the ATUM prefix to all the capabilities.
        $capabilities = preg_filter( '/^/', 'atum_' , $capabilities );

        $admin_role = get_role( 'shop_manager' );

        foreach ( $capabilities as $cap ) {
            $admin_role->add_cap( $cap );

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.