76 wordpress woocommerce review
Skill FluxonLab/Skillry/plugins/optional-specialist/skills/76-wordpress-woocommerce-review
Use when you need to review WordPress, WooCommerce, PHP plugin, theme, checkout, payment, and extension changes.From its SKILL.md
npx -y skills add FluxonLab/Skillry --skill 76-wordpress-woocommerce-reviewAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
- 2 stars2 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
7.3 KB, ~1.6k tokens by cl100k_base, as published. Nobody here has run it
WordPress & WooCommerce Review
Purpose
Perform a structured security, correctness, and architecture review of WordPress plugins, themes, and WooCommerce extensions. Focus on WordPress-specific attack surfaces (XSS, CSRF, SQLi, privilege escalation) and WooCommerce commerce integrity (order flow, payment hooks, stock sync).
When to use
- Reviewing a custom plugin or theme before deployment to a WordPress site.
- Auditing WooCommerce checkout, order, or payment extension code.
- Evaluating a PR that modifies
functions.php, a plugin's main file, REST endpoints, shortcodes, or Gutenberg blocks. - Security review of any code that touches
$wpdb,$_POST/$_GET, user capability checks, or nonces. - Code uses WooCommerce action/filter hooks (
woocommerce_*,wc_*) and the behavior needs verification.
When not to use
- Pure front-end review with no PHP and no WordPress APIs involved — use a general JS/CSS review instead.
- Infrastructure (server config, Nginx, MySQL tuning) — that is outside plugin/theme scope.
- Reviewing a headless setup that uses WP only as a data source and has no PHP execution path in scope.
Procedure
1. Identify entry points
- List all hooks registered:
add_action,add_filter,add_shortcode,register_rest_route. - Map each hook to its callback and note whether it fires on the front-end, admin, or both.
- Identify REST endpoints and their
permission_callback.
2. Nonce (CSRF) verification
- Every form submission and AJAX handler must call
check_ajax_referer()orwp_verify_nonce()before processing data. - Nonce field must be printed with
wp_nonce_field()in forms. - REST endpoints that mutate state must use
permission_callback—__return_trueis a red flag.
3. Capability checks
- Admin-only actions must call
current_user_can('manage_options')or the appropriate capability before executing. - WooCommerce shop management requires
manage_woocommerce. - Never rely on
is_admin()alone — it is true for AJAX requests too.
4. Input sanitization and output escaping
- Sanitize on the way in:
sanitize_text_field(),sanitize_email(),absint(),wp_kses_post()depending on data type. - Escape on the way out:
esc_html(),esc_attr(),esc_url(),wp_kses(). - Never echo raw
$_POST/$_GET/$_REQUESTvalues. - Translated strings with variables must use
esc_html_e()or wrap withesc_html().
5. Database queries — $wpdb prepared statements
- Direct queries must use
$wpdb->prepare()with%s,%d,%fplaceholders. $wpdb->get_results( $wpdb->prepare(...) )— never string-interpolate user input into SQL.- Prefer WP_Query / WC_Order_Query over raw SQL when the ORM supports the use case.
6. WooCommerce hook correctness
- Checkout flow: verify hooks fire in the right order (
woocommerce_checkout_process→woocommerce_checkout_order_processed→woocommerce_payment_complete). - Stock deduction must use
wc_reduce_stock_levels()orWC_Product::set_stock_quantity()— never raw DB writes to_stock. - Order status transitions via
$order->update_status(), not directwp_update_post(). - Payment gateway classes must extend
WC_Payment_Gatewayand implementprocess_payment()returning a result array withresultandredirectkeys.
7. Plugin/theme structure
- Plugin must have a valid file header (
Plugin Name,Version,Requires at least,Requires PHP). - No business logic in template files — templates should only render.
load_plugin_textdomain()called onplugins_loadedfor i18n.- Assets enqueued via
wp_enqueue_scripts/wp_enqueue_style, not inline<script>tags. - Activation/deactivation hooks must not run upgrade routines that can break on repeated execution.
8. WooCommerce extension specifics
- Custom product types extend
WC_Productand register viawoocommerce_product_classfilter. - Meta stored with
update_post_meta()or$product->update_meta_data()+$product->save(). - Admin columns and order actions added via correct WooCommerce hooks, not raw
manage_posts_columns. - Webhooks and payment IPN handlers verify signature before touching order state.
Checklist
Security:
- All AJAX/form handlers call
wp_verify_nonce()orcheck_ajax_referer(). - All state-changing REST routes have a real
permission_callback. -
current_user_can()checked before any privileged action. - Every
$_POST/$_GETvalue sanitized before use. - Every dynamic value escaped before output.
- No raw
$wpdb->query()with unsanitized input — all use$wpdb->prepare().
WooCommerce correctness:
- Payment gateway extends
WC_Payment_Gateway;process_payment()returns correct array. - Stock changes go through WooCommerce stock functions, not direct DB writes.
- Order status changes via
$order->update_status(). - Custom meta persisted via
$product->save()orupdate_post_meta(). - Hooks use correct priority and accepted args count.
Plugin hygiene:
- Plugin header is complete and version is bumped.
- Assets are enqueued, not inline-printed.
- Text domain loaded on
plugins_loaded. - No PHP notices (undefined variables, deprecated function calls).
- Activation hook idempotent — safe to run twice.
Common issues & anti-patterns
- Missing nonce in AJAX handler: AJAX actions registered with
wp_ajax_*frequently skip nonce checks, enabling CSRF against logged-in users. - Direct
echo $_POST['field']: Echoing unsanitized input into HTML causes stored or reflected XSS. $wpdb->query("SELECT ... WHERE id=$id"): Classic SQL injection. Always use$wpdb->prepare().is_admin()as a capability gate:is_admin()returns true for AJAX requests regardless of user role — pair it withcurrent_user_can().- WooCommerce order meta via
wp_update_post(): Bypasses WC meta cache, causes inconsistency. Use$order->update_meta_data()+$order->save(). - Hardcoded table names: Use
$wpdb->prefix . 'tablename'— never hardcodewp_. - Enqueuing scripts on every page: Use
is_checkout(),is_product()to limit scope. - No sanitization on payment gateway settings fields: Gateway option values saved via
$this->init_settings()/$this->process_admin_options()must still be sanitized.
Required output
Return a structured report with:
- Summary: one-paragraph verdict (pass / needs fixes / blocked).
- Evidence: specific file + line references for each finding.
- Findings table: severity (critical / high / medium / low / info), category, description, remediation.
- Verification: which checks passed cleanly.
- Risks: any issues that could affect live orders, payments, or user data.
- Next handoff: recommended follow-up (re-review after fix, QA on staging, WooCommerce compatibility test).
Safety
- Never execute or deploy code under review.
- Never print credentials, API keys, or payment gateway live secrets found in code.
- Do not modify plugin files unless the task explicitly authorizes edits.
- Flag any hardcoded credentials or keys as critical findings requiring immediate rotation.
- If a payment-related vulnerability is found, mark it critical and note it blocks deployment.
What ships with it
Read from the repository
Just SKILL.md. No reference files, no scripts.