Use when building, extending, auditing, or modernizing WordPress sites end to end: themes, plugins, WooCommerce, performance, security hardening, or WordPress 7.0 features (AI Client, Abilities API, PHP-only blocks, DataViews). Use as the entry point that routes to the three focused WordPress skills. Do not use for non-WordPress PHP, or front-end work with no WordPress involvement.
64
81%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
Low
Low-risk findings worth noting
Comprehensive WordPress development workflow covering theme development, plugin creation, WooCommerce integration, performance optimization, and security. This bundle orchestrates skills for building production-ready WordPress sites and applications.
WordPress 7.0 "Armstrong" shipped May 20, 2026 (the originally planned April 9 date slipped during RC). Minimum PHP is now 7.4; PHP 8.3+ is recommended.
show_in_rest => true and avoid legacy meta boxes so your data is RTC-ready whenever it landsWP_COLLABORATION_MAX_USERS constant or a sync.providers filter in core — those are not shipped core APIswp_ai_client_prompt())/wp-json/abilities/v1/manifestwordpress/mcp-adapter) exposes Abilities as MCP tools for AI agentswatch() replaces effect from @preact/signalsdisableContentOnlyForUnsyncedPatterns settingUse this workflow when:
// wp-config.php - AI Client and collaboration settings
// Real-Time Collaboration did not ship in 7.0; there is no core collaboration
// constant to define. When the feature plugin lands, configure it there.
// AI Connector is enabled by installing a provider plugin
// (e.g., OpenAI, Anthropic Claude, or Google Gemini connector)
// No constant needed - configure via Settings > Connectors in admintheme-name/
├── style.css
├── functions.php
├── index.php
├── header.php
├── footer.php
├── sidebar.php
├── single.php
├── page.php
├── archive.php
├── search.php
├── 404.php
├── template-parts/
├── inc/
├── assets/
│ ├── css/
│ ├── js/
│ └── images/
└── languages/show_in_rest => true (keeps data editable via REST and ready for future collaboration features)$wpdb): Use %i identifier placeholders in $wpdb->prepare() (WP 6.2+) for dynamic table/column names; avoid string interpolation {$this->table}load_plugin_textdomain() for WordPress.org plugins; core loads translations JIT automaticallywp_ai_client_prompt() for AI featuresregister_post_meta('post', 'custom_field', [
'type' => 'string',
'single' => true,
'show_in_rest' => true, // Expose via REST API
'sanitize_callback' => 'sanitize_text_field',
]);// Using WordPress 7.0 AI Connector
// Note: Requires an AI provider plugin (OpenAI, Claude, or Gemini) to be installed and configured
// Basic text generation
$response = wp_ai_client_prompt('Summarize this content.')
->generate_text();
// With temperature for deterministic output
$response = wp_ai_client_prompt('Summarize this content.')
->using_temperature(0.2)
->generate_text();
// With model preference (tries first available in list)
$response = wp_ai_client_prompt('Summarize this content.')
->using_model_preference('gpt-4', 'claude-3-opus', 'gemini-2-pro')
->generate_text();
// For JSON structured output
$schema = [
'type' => 'object',
'properties' => [
'summary' => ['type' => 'string'],
'keywords' => ['type' => 'array', 'items' => ['type' => 'string']]
],
'required' => ['summary']
];
$response = wp_ai_client_prompt('Analyze this content and return JSON.')
->using_system_instruction('You are a content analyzer.')
->as_json_response($schema)
->generate_text();plugin-name/
├── plugin-name.php
├── includes/
│ ├── class-plugin-activator.php
│ ├── class-plugin-deactivator.php
│ ├── class-plugin-loader.php
│ └── class-plugin.php
├── admin/
│ ├── class-plugin-admin.php
│ ├── css/
│ └── js/
├── public/
│ ├── class-plugin-public.php
│ ├── css/
│ └── js/
└── languages/wp plugin check) with 0 errors and 0 warnings (WordPress.org audits ignore local phpcs.xml.dist exclusions)register_post_type('book', [
'labels' => [...],
'public' => true,
'has_archive' => true,
'supports' => ['title', 'editor', 'thumbnail', 'excerpt'],
'menu_icon' => 'dashicons-book',
'show_in_rest' => true, // Expose via REST API
]);
// Register meta with REST API for collaboration
register_post_meta('book', 'isbn', [
'type' => 'string',
'single' => true,
'show_in_rest' => true,
'sanitize_callback' => 'sanitize_text_field',
]);add_action('rest_api_init', function() {
register_rest_route('myplugin/v1', '/books', [
'methods' => 'GET',
'callback' => 'get_books',
'permission_callback' => '__return_true',
]);
});// Auto-generate post excerpt with AI
add_action('save_post', function($post_id, $post) {
if (wp_is_post_autosave($post_id) || wp_is_post_revision($post_id)) {
return;
}
// Skip if excerpt already exists
if (!empty($post->post_excerpt)) {
return;
}
$content = strip_tags($post->post_content);
if (empty($content)) {
return;
}
// Check if AI client is available
if (!function_exists('wp_ai_client_prompt')) {
return;
}
// Build prompt with input
// The AI client returns a fluent builder; chain configuration and generation.
// Errors surface from generate_text() as WP_Error.
$summary = wp_ai_client_prompt(
'Create a brief 2-sentence summary of this content: ' . substr($content, 0, 1000)
)
->using_temperature(0.3) // Use temperature for consistent output
->generate_text();
if ($summary && !is_wp_error($summary)) {
wp_update_post([
'ID' => $post_id,
'post_excerpt' => sanitize_textarea_field($summary)
]);
}
}, 10, 2);// Register block entirely in PHP
register_block_type('my-plugin/hello-world', [
'render_callback' => function($attributes, $content) {
return '<p class="hello-world">Hello, World!</p>';
},
'attributes' => [
'message' => ['type' => 'string', 'default' => 'Hello!']
],
]);// Register ability category on correct hook
add_action('wp_abilities_api_categories_init', function() {
wp_register_ability_category('content-creation', [
'label' => __('Content Creation', 'my-plugin'),
'description' => __('Abilities for generating and managing content', 'my-plugin'),
]);
});
// Register abilities on correct hook
add_action('wp_abilities_api_init', function() {
wp_register_ability('my-plugin/generate-summary', [
'label' => __('Generate Post Summary', 'my-plugin'),
'description' => __('Creates an AI-powered summary of a post', 'my-plugin'),
'category' => 'content-creation',
'input_schema' => [
'type' => 'object',
'properties' => [
'post_id' => ['type' => 'integer', 'description' => 'The post ID to summarize']
],
'required' => ['post_id']
],
'output_schema' => [
'type' => 'object',
'properties' => [
'summary' => ['type' => 'string', 'description' => 'The generated summary']
]
],
'execute_callback' => 'my_plugin_generate_summary_handler',
'permission_callback' => function() {
return current_user_can('edit_posts');
}
]);
});
// Handler function for the ability
function my_plugin_generate_summary_handler($input) {
$post_id = isset($input['post_id']) ? absint($input['post_id']) : 0;
$post = get_post($post_id);
if (!$post) {
return new WP_Error('invalid_post', 'Post not found');
}
$content = strip_tags($post->post_content);
if (empty($content)) {
return ['summary' => ''];
}
if (!function_exists('wp_ai_client_prompt')) {
return new WP_Error('ai_unavailable', 'AI client not available');
}
$result = wp_ai_client_prompt('Summarize in 2 sentences: ' . substr($content, 0, 1000))
->using_temperature(0.3)
->generate_text();
if (is_wp_error($result)) {
return $result;
}
return ['summary' => sanitize_textarea_field($result)];
}add_action('init', function() {
class WC_Product_Custom extends WC_Product {
// Custom product implementation
}
});WordPress has first-class MCP support through the official MCP Adapter. When a WordPress site is connected to the agent via MCP, prefer its tools over guessing at WP-CLI incantations or REST calls: read site state through MCP first, then edit code.
| Piece | What it is | Status |
|---|---|---|
| Abilities API | Register typed, permission-checked capabilities via wp_register_ability() | Introduced 6.9, stable in 7.0 |
MCP Adapter (wordpress/mcp-adapter) | Turns registered Abilities into MCP tools, resources, prompts | Official, "AI Building Blocks for WordPress" |
@automattic/mcp-wordpress-remote | HTTP remote proxy for publicly reachable sites | Official (note: the older Automattic/wordpress-mcp plugin is deprecated — do not use it) |
| WordPress.org MCP server | Helps prepare, validate, and submit plugins to the plugin directory | Official (developer.wordpress.org/plugins/wordpress-org/using-the-mcp-server/) |
@wp-playground/mcp | MCP server for WordPress Playground environments | Official |
Local site (STDIO via WP-CLI — needs WP-CLI installed):
{
"mcpServers": {
"wordpress": {
"command": "wp",
"args": [
"--path=/path/to/wordpress",
"mcp-adapter", "serve",
"--server=mcp-adapter-default-server",
"--user=admin"
]
}
}
}Remote site (HTTP via the official proxy + application password):
{
"mcpServers": {
"wordpress": {
"command": "npx",
"args": ["-y", "@automattic/mcp-wordpress-remote@latest"],
"env": {
"WP_API_URL": "https://yoursite.example/wp-json/mcp/mcp-adapter-default-server",
"WP_API_USERNAME": "admin",
"WP_API_PASSWORD": "xxxx xxxx xxxx xxxx xxxx xxxx"
}
}
}
}The default server exposes three tools: mcp-adapter-discover-abilities,
mcp-adapter-get-ability-info, mcp-adapter-execute-ability. WordPress 6.9+ ships
core/get-site-info, core/get-user-info, and core/get-environment-info — ask the
agent to run these before assuming environment details.
'meta' => ['mcp' => ['public' => true]] are exposed
on the default server. Mark read-only abilities public; keep destructive ones off
the default server or behind explicit capability checks.__return_true as a permission_callback for state-changing abilities.execute_callback, exactly as you would for REST requests.Before moving to next phase, verify:
wordpress-theme-development - Theme development workflowwordpress-plugin-development - Plugin development workflowwordpress-woocommerce-development - WooCommerce development workflow87555db
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.