: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in
* The class is responsible for managing and registering capabilities in WordPress.
* @author Advanced Ads <info@wpadvancedads.com>
namespace AdvancedAds\Installation;
defined( 'ABSPATH' ) || exit;
* Registered capabilities.
private $capabilities = [];
* Registered capabilities by role.
private $role_capabilities = [];
public function __construct() {
$this->register_defaults();
* Set default capabilities.
public function register_defaults(): void {
'advanced_ads_manage_options',
esc_html__( 'Allows changing plugin options', 'advanced-ads' ),
'advanced_ads_see_interface',
esc_html__( 'Allows access to the Advanced Ads backend', 'advanced-ads' ),
esc_html__( 'Allows editing ads', 'advanced-ads' ),
'advanced_ads_manage_placements',
esc_html__( 'Allows changing the placements page', 'advanced-ads' ),
'advanced_ads_place_ads',
esc_html__( 'Enables shortcode button', 'advanced-ads' ),
* @param string $capability Capability slug.
* @param string $title Capability title.
* @param array|string $roles Roles to assigned.
public function register( $capability, $title, $roles ): void {
$this->capabilities[ $capability ] = $title;
foreach ( (array) $roles as $role ) {
$this->role_capabilities[ $role ] = $this->role_capabilities[ $role ] ?? [];
$this->role_capabilities[ $role ][] = $capability;
public function create_capabilities(): void {
foreach ( $this->get_roles() as $role ) {
$this->loop_capabilities( $role, 'add_cap' );
public function remove_capabilities(): void {
foreach ( $this->get_roles() as $role ) {
$this->loop_capabilities( $role, 'remove_cap' );
public function reset_capabilities(): void {
$this->remove_capabilities();
$this->create_capabilities();
private function get_roles(): array {
return array_keys( $roles->get_names() );
* Loop capabilities and perform action.
* @param string $role_slug Role slug.
* @param string $perform Action to perform.
private function loop_capabilities( $role_slug, $perform ): void {
if ( ! isset( $this->role_capabilities[ $role_slug ] ) ) {
$role = get_role( $role_slug );
foreach ( $this->role_capabilities[ $role_slug ] as $cap ) {