php

PHP development — OOP patterns, Laravel basics, WordPress plugin development, REST API endpoints, wpdb queries, security (sanitization, nonces)

SKILL.md

GitHub

PHP Skill

Modern PHP development with a focus on WordPress plugin development, OOP patterns, and security.

RULE: Always show generated class/function signatures before writing full implementation. Wait for GO.

🚧 Status: Stub — implementation pending

This reference skill has the structure but the snippet content is still being filled in (you'll see <!-- TODO --> placeholders below). It activates and tells Claude the topic exists, but won't yield deep snippets yet.

Want to help? Pick any TODO, write the snippet, open a PR. See CONTRIBUTING.md. Each contribution moves the skill closer to "Ready" status.


Capabilities

OOP PHP Patterns

<!-- TODO: Singleton, Factory, Observer patterns in PHP --> <!-- TODO: Interfaces, abstract classes, traits --> <!-- TODO: PHP 8.x features: named args, match, fibers, readonly, enums --> <!-- TODO: Composer autoloading, PSR-4 namespace setup -->

Laravel Basics

<!-- TODO: Routes, controllers, middleware, request validation --> <!-- TODO: Eloquent ORM, migrations, factories, seeders --> <!-- TODO: Blade templates, Livewire basics --> <!-- TODO: Artisan commands, queues, jobs -->

Custom Plugin Development

<!-- TODO: Plugin bootstrap pattern (main class, loader, activator, deactivator) --> <!-- TODO: Admin pages, settings API, options --> <!-- TODO: Shortcodes, widgets, Gutenberg blocks in PHP --> <!-- TODO: Plugin update checker (custom update server) -->

REST API Endpoints

<!-- TODO: register_rest_route, WP_REST_Controller base class --> <!-- TODO: Authentication (nonce, application passwords, JWT) --> <!-- TODO: Custom endpoints for WooCommerce data --> <!-- TODO: Rate limiting, input validation, error responses -->

Database Queries (wpdb)

<!-- TODO: $wpdb->get_results, get_row, get_var, insert, update, delete --> <!-- TODO: Prepared statements — never interpolate user input --> <!-- TODO: Custom table creation in plugin activation --> <!-- TODO: Query optimization, EXPLAIN, slow query identification -->

Security (Sanitization, Nonces)

<!-- TODO: sanitize_text_field, sanitize_email, esc_html, esc_attr, esc_url --> <!-- TODO: wp_nonce_field, check_admin_referer, wp_verify_nonce --> <!-- TODO: current_user_can() capability checks --> <!-- TODO: SQL injection prevention, XSS prevention, CSRF protection -->

Patterns Reference

Secure wpdb query

global $wpdb;
$results = $wpdb->get_results(
    $wpdb->prepare(
        "SELECT * FROM {$wpdb->prefix}my_table WHERE user_id = %d AND status = %s",
        $user_id,
        $status
    )
);

REST API endpoint

add_action( 'rest_api_init', function() {
    register_rest_route( 'myplugin/v1', '/data/(?P<id>\d+)', [
        'methods'             => 'GET',
        'callback'            => 'myplugin_get_data',
        'permission_callback' => function() {
            return current_user_can( 'read' );
        },
        'args' => [
            'id' => [ 'required' => true, 'validate_callback' => 'is_numeric' ]
        ],
    ]);
});

function myplugin_get_data( WP_REST_Request $request ): WP_REST_Response {
    $id   = absint( $request->get_param( 'id' ) );
    $data = get_post_meta( $id, '_my_meta', true );
    return new WP_REST_Response( [ 'data' => $data ], 200 );
}

Nonce verification

// In form
wp_nonce_field( 'myplugin_action', 'myplugin_nonce' );

// On save
if ( ! isset( $_POST['myplugin_nonce'] ) ||
     ! wp_verify_nonce( $_POST['myplugin_nonce'], 'myplugin_action' ) ) {
    wp_die( 'Security check failed' );
}
<!-- TODO: Add full interactive workflows for each capability above -->