Woocommerce

作者 mindrally97184105b5da无许可证269 个星标收录于 2026年10月8日更新于 2026年10月8日仓库5周前更新

WordPress and WooCommerce development guidelines with PHP best practices, security standards, and extensibility patterns

AI 生成的概览

面向 WordPress 与 WooCommerce 插件开发的指南,涵盖 PHP 规范、钩子、安全与扩展模式。

功能
该技能提供用 PHP 构建 WordPress 与 WooCommerce 扩展的开发指南。内容涵盖编码规范、命名空间、动作与过滤钩子、输入清理与输出转义、nonce 与权限检查、自定义产品类型、REST API 路由、数据库访问、缓存、插件目录结构以及 PHPUnit 测试。它产出的是代码模式与约定,而不是文件或脚本。
适用场景
在编写或审查 WordPress 或 WooCommerce 的 PHP 代码时使用,例如定制产品页面、结账字段、订单处理,或注册自定义产品类型与 REST 端点。也适用于为现有电商插件落实安全与性能约定。
运行要求
不包含脚本,仅为说明性内容。应用这些指南需要具备 PHP 的 WordPress 与 WooCommerce 环境;测试部分涉及 PHPUnit、WP_UnitTestCase、WooCommerce 测试辅助工具以及 PHPCS WordPress 规范。

WooCommerce Development

You are an expert in WordPress and WooCommerce development, PHP best practices, and e-commerce solutions.

Core Principles

  • Follow WordPress coding standards
  • Use WooCommerce hooks and filters properly
  • Prioritize security in all code
  • Maintain backwards compatibility
  • Write performant, scalable code

PHP Best Practices

Coding Standards

  • Follow WordPress PHP Coding Standards
  • Use meaningful function and variable names
  • Prefix all functions and classes to avoid conflicts
  • Document code with PHPDoc comments

Namespacing

php
namespace MyPlugin\WooCommerce;
class ProductHandler {    public function __construct() {        add_action('woocommerce_before_add_to_cart_form', [$this, 'custom_content']);    }
    public function custom_content() {        // Custom functionality    }}

WooCommerce Hooks

Action Hooks

php
// Add content after product summaryadd_action('woocommerce_after_single_product_summary', 'custom_product_content', 15);function custom_product_content() {    echo '<div class="custom-content">Additional information</div>';}
// Modify order processingadd_action('woocommerce_order_status_completed', 'process_completed_order', 10, 1);function process_completed_order($order_id) {    $order = wc_get_order($order_id);    // Process order}

Filter Hooks

php
// Modify product price displayadd_filter('woocommerce_get_price_html', 'custom_price_html', 10, 2);function custom_price_html($price, $product) {    if ($product->is_on_sale()) {        $price .= '<span class="sale-badge">Sale!</span>';    }    return $price;}
// Add custom checkout fieldsadd_filter('woocommerce_checkout_fields', 'custom_checkout_fields');function custom_checkout_fields($fields) {    $fields['billing']['billing_custom_field'] = [        'type' => 'text',        'label' => __('Custom Field', 'textdomain'),        'required' => false,        'priority' => 25,    ];    return $fields;}

Security

Data Validation

php
// Sanitize input$product_id = absint($_POST['product_id']);$quantity = wc_stock_amount($_POST['quantity']);$email = sanitize_email($_POST['email']);
// Escape outputecho esc_html($product->get_name());echo esc_url($product->get_permalink());echo wp_kses_post($product->get_description());

Nonce Verification

php
// Create noncewp_nonce_field('custom_action', 'custom_nonce');
// Verify nonceif (!wp_verify_nonce($_POST['custom_nonce'], 'custom_action')) {    wp_die(__('Security check failed', 'textdomain'));}

Capability Checks

php
if (!current_user_can('manage_woocommerce')) {    wp_die(__('Unauthorized access', 'textdomain'));}

Custom Product Types

php
class WC_Product_Custom extends WC_Product {    public function get_type() {        return 'custom';    }
    // Custom methods}
add_filter('product_type_selector', function($types) {    $types['custom'] = __('Custom Product', 'textdomain');    return $types;});

REST API Extensions

php
add_action('rest_api_init', function() {    register_rest_route('custom/v1', '/products/featured', [        'methods' => 'GET',        'callback' => 'get_featured_products',        'permission_callback' => '__return_true',    ]);});
function get_featured_products($request) {    $args = [        'status' => 'publish',        'featured' => true,        'limit' => 10,    ];    $products = wc_get_products($args);    return rest_ensure_response($products);}

Database Operations

php
global $wpdb;
// Use prepare for queries with variables$results = $wpdb->get_results($wpdb->prepare(    "SELECT * FROM {$wpdb->prefix}wc_orders WHERE status = %s",    'completed'));
// Use WooCommerce data stores when possible$product = new WC_Product();$product->set_name('New Product');$product->set_regular_price('29.99');$product->save();

Performance

  • Use transients for caching
  • Optimize database queries
  • Lazy load when possible
  • Minimize HTTP requests
  • Use object caching

Caching

php
$cached_data = get_transient('custom_product_data');if (false === $cached_data) {    $cached_data = expensive_query();    set_transient('custom_product_data', $cached_data, HOUR_IN_SECONDS);}

Plugin Structure

plugin-name/├── plugin-name.php├── includes/│   ├── class-main.php│   ├── class-admin.php│   └── class-frontend.php├── admin/│   ├── css/│   └── js/├── public/│   ├── css/│   └── js/├── templates/└── languages/

Testing

  • Write unit tests with PHPUnit
  • Use WP_UnitTestCase for WordPress tests
  • Test with WooCommerce test helpers
  • Validate with PHPCS WordPress standards

来源与署名

来源:mindrally/skills位于woocommerce提交9718410

许可证: 无许可证

内容归原作者所有。SourceWeft 从公开仓库中收录这些内容。

举报或申请下架