| Server IP : 146.59.209.152 / Your IP : 216.73.216.152 Web Server : Apache System : Linux webm009.cluster131.gra.hosting.ovh.net 6.18.42-ovh-vps-grsec-zfs+ #1 SMP PREEMPT_DYNAMIC Wed Aug 5 15:59:48 CEST 2026 x86_64 User : monpetu ( 144298) PHP Version : 7.4.33 Disable Function : _dyuweyrj4,_dyuweyrj4r,dl MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /home/monpetu/www/ipprint/wp-content/plugins/modern-cart/docs/wiki/abilities/ |
Upload File : |
# Modern Cart Abilities — Overview
Modern Cart exposes a set of **abilities** — structured, permission-gated server-side operations — through the [WordPress Abilities API](https://developer.wordpress.org/apis/abilities/). Abilities are the primary integration surface for AI agents (e.g. via MCP) and programmatic tooling that needs to read or write Modern Cart configuration.
---
## What is an Ability?
An ability is a named, self-describing operation with:
- A **unique ID** (e.g. `moderncart/get-settings`)
- A **JSON Schema** input definition consumed by callers
- An **execute callback** that runs the operation and returns structured data
- A **permission callback** that enforces WordPress capability checks
- **MCP annotations** (`readOnlyHint`, `destructiveHint`, `idempotentHint`) that help AI agents reason about safety
---
## Architecture
### Class Hierarchy
```
Abstract_Ability (inc/abilities/abstract-ability.php)
├── Settings\Get_Settings (moderncart/get-settings)
├── Settings\Set_Settings (moderncart/update-settings)
├── Settings\Get_Available_Options (moderncart/get-available-options)
├── Settings\Reset_Settings (moderncart/reset-settings)
├── Plugin\Get_Plugin_Status (moderncart/get-plugin-status)
├── Plugin\Complete_Onboarding (moderncart/complete-onboarding)
└── Cart\Get_Cart_Summary (moderncart/get-cart-summary)
```
### `Abstract_Ability` Contract
Every ability must implement three methods:
| Method | Purpose |
|--------|---------|
| `configure()` | Set `$id`, `$label`, `$description`, `$capability`, `$is_destructive` |
| `get_input_schema()` | Return a JSON Schema array describing accepted parameters |
| `execute( $args )` | Run the operation; return a plain `array` on success or `WP_Error` on failure |
The base class provides:
- `handle_execute( $args )` — re-checks the user capability before delegating to `execute()`, and wraps PHP exceptions in `WP_Error`
- `get_final_input_schema()` — injects a `dry_run` boolean into the schema for any ability where `$is_destructive = true`
- `get_annotations()` — derives MCP hint booleans from `$is_destructive`
- `check_permission( $request )` — calls `current_user_can( $this->capability )`
### `Response` Helper
All ability `execute()` methods use `Response` for consistent output:
```php
// Success — return the data array directly
return Response::success( [ 'key' => 'value' ] );
// Failure — return a WP_Error
return Response::error( 'Human-readable message', 'error_code' );
```
`Response::success()` returns the data array unchanged. `Response::error()` wraps the message in a `WP_Error`, which the Abilities API converts to an appropriate error response for the caller.
---
## Registration
Abilities are registered in `Register_Abilities` (`inc/abilities/register-abilities.php`) on two WordPress actions:
| Action | Callback | Purpose |
|--------|----------|---------|
| `wp_abilities_api_categories_init` | `register_category()` | Registers the `moderncart` category |
| `wp_abilities_api_init` | `register_abilities()` | Instantiates and registers each ability class |
Each ability is passed to `wp_register_ability()` with:
```php
wp_register_ability( $ability->get_id(), [
'label' => $ability->get_label(),
'description' => $ability->get_description(),
'category' => $ability->get_category(),
'input_schema' => $ability->get_final_input_schema(),
'execute_callback' => [ $ability, 'handle_execute' ],
'permission_callback' => [ $ability, 'check_permission' ],
'meta' => [
'annotations' => $ability->get_annotations(),
'show_in_rest' => true,
'mcp' => [ 'public' => true, 'type' => 'tool' ],
],
] );
```
---
## Extending via Filter
Third-party plugins (including Modern Cart Pro) can register additional abilities using the `moderncart_abilities` filter:
```php
add_filter( 'moderncart_abilities', function ( $abilities ) {
$abilities['my-ability'] = [
'file' => '/path/to/my-ability.php',
'class' => 'MyPlugin\Inc\Abilities\My_Ability',
];
return $abilities;
} );
```
**Security**: Only classes whose fully-qualified name begins with `ModernCart\Inc\Abilities\` or `ModernCartPro\Inc\Abilities\` are instantiated. All others are silently skipped.
---
## Setting Groups Reference
All settings-related abilities operate on one or more of these four WordPress option keys:
| Constant | Option Key | Purpose |
|----------|-----------|---------|
| `MODERNCART_MAIN_SETTINGS` | `moderncart_setting` | Plugin activation scope, AJAX, free shipping bar, express checkout |
| `MODERNCART_SETTINGS` | `moderncart_cart` | Cart style, theme, labels, coupon field, section styling |
| `MODERNCART_FLOATING_SETTINGS` | `moderncart_floating` | Floating cart position and colors |
| `MODERNCART_APPEARANCE_SETTINGS` | `moderncart_appearance` | Global colors, typography, header alignment |
---
## Abilities Index
| Ability ID | Category | Type | Page |
|-----------|----------|------|------|
| `moderncart/get-settings` | Settings | Read | [Ability-Get-Settings](Ability-Get-Settings) |
| `moderncart/update-settings` | Settings | Write | [Ability-Update-Settings](Ability-Update-Settings) |
| `moderncart/get-available-options` | Settings | Read | [Ability-Get-Available-Options](Ability-Get-Available-Options) |
| `moderncart/reset-settings` | Settings | Write (destructive) | [Ability-Reset-Settings](Ability-Reset-Settings) |
| `moderncart/get-plugin-status` | Plugin | Read | [Ability-Get-Plugin-Status](Ability-Get-Plugin-Status) |
| `moderncart/complete-onboarding` | Plugin | Write (idempotent) | [Ability-Complete-Onboarding](Ability-Complete-Onboarding) |
| `moderncart/get-cart-summary` | Cart | Read | [Ability-Get-Cart-Summary](Ability-Get-Cart-Summary) |
---
## Required Capability
All abilities require the WordPress `manage_options` capability (administrator). An ability whose `$capability` is not overridden will automatically reject requests from non-admin users with a `moderncart_ability_forbidden` error.
---
## Dry Run Support
Abilities marked `$is_destructive = true` automatically receive a `dry_run` parameter. When `dry_run: true` is passed, the ability simulates the operation and returns a preview without applying any changes. See individual ability pages for dry run response shapes.
**Destructive abilities:** `moderncart/update-settings`, `moderncart/reset-settings`