今日の競争が激しいeコマース環境において、標準的なWooCommerceストアではすべてのビジネスニーズを満たすことが難しいことが多いです。カスタマイズされた支払いプロセス、特別な送料計算ルール、または第三者システムとの深い統合など、ストアのコア機能を拡張する必要が生じる場合があります。ここにカスタムプラグイン開発の価値があるのです。自分でプラグインを作成することで、ストアの機能性をさらに向上させることができるのです。 WooCommerce プラグインを活用することで、完全なコントロール権を握り、他にはないショッピング体験を創造し、模倣しにくいビジネスの障壁を構築することができます。
WooCommerceプラグインの開発環境の設定
どんな開発を行うにも、安定しており、隔離されたローカル開発環境が不可欠です。これにより、オンライン上のデータを保護するだけでなく、デバッグやテストも容易に行うことができます。
ローカルのWordPress環境を構築する
Local by Flywheel、XAMPP、MAMPなどのツールを使用してローカル環境を迅速に構築することをお勧めします。環境が以下の要件を満たしていることを確認してください: WooCommerce 最低要件:PHP 7.2 以上、MySQL 5.6 以上、そして最新バージョンの WordPress。WordPress のインストールが完了したら、公式のプラグインディレクトリから必要なプラグインをインストールし、有効にしてください。 WooCommerce プラグインをインストールし、初期設定ガイドに従って設定を完了すると、サンプルデータをインポートすることで開発が大いに進むでしょう。
推薦図書 WooCommerceを使用した電子商取引(EC)サイトの開発とパフォーマンス最適化のための完全ガイド。
プラグインの基本構造を作成する
一つ WooCommerce このプラグインは、まず第一に標準的なWordPressプラグインです。 wp-content/plugins/ ディレクトリ内に新しいフォルダを作成します。例えば: my-custom-woocommerceそのフォルダ内に、メインのプラグインファイルを作成してください。通常はプラグインの名前をそのままファイル名にします。例えば: my-custom-woocommerce.php。
このメインファイルには、標準的なWordPressプラグインヘッダー情報を含める必要があります。以下に基本的な例を示します:
<?php
/**
* Plugin Name: My Custom WooCommerce
* Plugin URI: https://yourwebsite.com/
* Description: 为 WooCommerce 商店添加自定义功能。
* Version: 1.0.0
* Author: 您的名字
* Author URI: https://yourwebsite.com/
* License: GPL v2 or later
* Text Domain: my-custom-woocommerce
* Domain Path: /languages
* WC requires at least: 5.0.0
* WC tested up to: 8.0.0
*/
// 防止直接访问
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
// 检查 WooCommerce 是否已激活
if ( ! in_array( 'woocommerce/woocommerce.php', apply_filters( 'active_plugins', get_option( 'active_plugins' ) ) ) ) {
add_action( 'admin_notices', function() {
?>
<div class="notice notice-error">
<p>“「My Custom WooCommerce」プラグインを使用するには、WooCommerceがインストールされていて有効になっている必要があります。</p>
</div>
<?php
} );
return;
} 重要なポイントは、「使用された」という点にあります。 WC requires at least と WC tested up to ヘッダー情報を使用して、以下のことを宣言します: WooCommerce その互換性を確認し、コード内でチェックを行います。 WooCommerce 有効化されていますか?
Core Extension Method: Action and Filter Hooks
WooCommerce その強力な点は、高度に拡張可能なフックシステムにあります。アクションフック(Actions)とフィルターフック(Filters)を理解し、熟知して使いこなすことが、カスタム開発の鍵となります。
アクションフックを使用してプロセスに介入する
アクションフックを使用すると、あなたは… WooCommerce 特定のタイミングで自分のコードを実行することができます。例えば、ユーザーが注文を行った後にカスタムの処理(外部APIの呼び出しなど)を実行したい場合などです。
推薦図書 WordPressプラグイン開発実践ガイド:ゼロから始めて、あなたの最初の機能プラグインを構築する。
を使用することができます。 woocommerce_thankyou フック機能は、注文に関する感謝のページでトリガーされます。もしくは、より汎用的な方法を使用することもできます。 woocommerce_checkout_order_processedこれは、注文処理が完了した際にトリガーされます。
add_action( 'woocommerce_checkout_order_processed', 'my_custom_order_action', 10, 3 );
function my_custom_order_action( $order_id, $posted_data, $order ) {
// 获取订单对象(如果未提供)
if ( ! $order instanceof WC_Order ) {
$order = wc_get_order( $order_id );
}
// 执行您的自定义逻辑,例如记录日志或发送请求
$logger = wc_get_logger();
$logger->info( '订单 #' . $order_id . ' 已创建,开始执行自定义任务。', array( 'source' => 'my-custom-plugin' ) );
// 调用外部 API 示例(伪代码)
// $response = wp_remote_post( 'https://api.example.com/notify', $args );
} フィルターフックを使用してデータを変更する
フィルターフックスを使用すると、内容を変更することができます。 WooCommerce 渡されたデータです。例えば、すべての商品価格に一定の手数料を加算したい場合などです。
を使用することができます。 woocommerce_product_get_price フィルターです。このフックは非常に強力ですが、すべての価格表示に影響を与えるため、慎重に使用する必要があります。
add_filter( 'woocommerce_product_get_price', 'my_custom_price_adjustment', 10, 2 );
function my_custom_price_adjustment( $price, $product ) {
// 只在前端购物车和商品页面应用,避免影响后台
if ( is_admin() && ! defined( 'DOING_AJAX' ) ) {
return $price;
}
// 假设增加 5 元手续费
$fee = 5;
$new_price = $price + $fee;
return $new_price;
} カスタム商品タイプとデータストレージ
WooCommerce デフォルトでは、シンプルな商品や変動する商品などがサポートされています。しかし、時には「予約商品」や「サービス商品」のような全く新しい商品タイプを作成する必要がある場合もあります。
新しい商品タイプを登録します。
新しい商品タイプを作成するにはいくつかのステップが必要です。まず、そのタイプを登録する必要があります。これは通常、以下のような手順で行われます: init アクションやプラグインの読み込みが完了した時に実行されます。
add_action( 'init', 'register_my_custom_product_type' );
function register_my_custom_product_type() {
class WC_Product_Custom extends WC_Product {
public function __construct( $product ) {
parent::__construct( $product );
$this->product_type = 'custom';
}
// 您可以在这里重写父类方法,或添加新方法
public function get_type() {
return 'custom';
}
// 示例:自定义“添加到购物车”按钮文本
public function add_to_cart_text() {
return __( '预约服务', 'my-custom-woocommerce' );
}
}
} その後、フィルターを使用してこの商品タイプを商品タイプの選択リストに追加する必要があります。
推薦図書 WooCommerceのカスタム製品ページを簡単に構築する:入門から上級まで。
add_filter( 'product_type_selector', 'add_custom_product_type_to_dropdown' );
function add_custom_product_type_to_dropdown( $types ) {
$types['custom'] = __( '自定义服务', 'my-custom-woocommerce' );
return $types;
} 商品のカスタムフィールドを追加する
新しい製品タイプについては、通常、追加のデータフィールドが必要になります。これは以下の方法で実現できます: WooCommerce 商品データボックス(Metabox)を使用して実現します。 woocommerce_product_options_general_product_data アクションにフィールドを追加し、それを使用してください。 woocommerce_process_product_meta アクションを保存してください。
add_action( 'woocommerce_product_options_general_product_data', 'add_custom_product_fields' );
function add_custom_product_fields() {
global $product_object;
echo '<div class="options_group show_if_custom">'; // `show_if_custom` 仅对“custom”类型显示
woocommerce_wp_text_input( array(
'id' => '_service_duration',
'label' => __( '服务时长 (小时)', 'my-custom-woocommerce' ),
'desc_tip' => true,
'description' => __( '请输入完成此服务预计需要的小时数。', 'my-custom-woocommerce' ),
'type' => 'number',
'custom_attributes' => array(
'step' => '0.5',
'min' => '0.5'
)
) );
echo '</div>';
}
// 保存字段
add_action( 'woocommerce_process_product_meta', 'save_custom_product_fields' );
function save_custom_product_fields( $post_id ) {
$product = wc_get_product( $post_id );
if ( $product->get_type() === 'custom' ) {
$duration = isset( $_POST['_service_duration'] ) ? sanitize_text_field( $_POST['_service_duration'] ) : '';
$product->update_meta_data( '_service_duration', $duration );
$product->save_meta_data();
}
} ショッピングカートや支払いプロセスとのやり取り
ショッピングカートと決済は、eコマースにおける核心的なプロセスです。WooCommerce ここには、カスタマイズ用のたくさんのフックが用意されています。
ショッピングカート内のアイテムの動作を変更する
あなたは以下の方法で… woocommerce_add_cart_item_data フィルターは、商品が買い物カートに追加される際にカスタムデータを付加します。例えば、「カスタムサービス」の商品に予約日を追加するといった具合です。
add_filter( 'woocommerce_add_cart_item_data', 'add_custom_data_to_cart_item', 10, 3 );
function add_custom_data_to_cart_item( $cart_item_data, $product_id, $variation_id ) {
$product = wc_get_product( $product_id );
if ( $product->get_type() === 'custom' && isset( $_POST['appointment_date'] ) ) {
$cart_item_data['appointment_date'] = sanitize_text_field( $_POST['appointment_date'] );
// 确保每个有不同预约日期的商品都被视为独立项目
$cart_item_data['unique_key'] = md5( microtime() . rand() );
}
return $cart_item_data;
} その後、あなたはそれを使用することができます。 woocommerce_get_item_data フィルターにより、カートページや支払いページにこれらのカスタムデータが表示されます。
カスタマイズされたチェックアウトフィールド
決済に関するフィールドを追加したり変更したりすることは非常に一般的です。 woocommerce_checkout_fields フィルターは簡単に実装できます。
add_filter( 'woocommerce_checkout_fields', 'add_custom_checkout_field' );
function add_custom_checkout_field( $fields ) {
$fields['billing']['billing_custom_vat'] = array(
'label' => __( '增值税号', 'my-custom-woocommerce' ),
'placeholder' => _x( '请输入您的公司税号', 'placeholder', 'my-custom-woocommerce' ),
'required' => false, // 根据业务需求调整
'class' => array( 'form-row-wide' ),
'clear' => true,
'priority' => 35, // 控制字段顺序
);
return $fields;
} このフィールドの値を注文に保存するには、以下の手順を使用する必要があります: woocommerce_checkout_update_order_meta アクション。
add_action( 'woocommerce_checkout_update_order_meta', 'save_custom_checkout_field' );
function save_custom_checkout_field( $order_id ) {
if ( ! empty( $_POST['billing_custom_vat'] ) ) {
update_post_meta( $order_id, '_billing_custom_vat', sanitize_text_field( $_POST['billing_custom_vat'] ) );
}
} 概要
WooCommerce プラグインのカスタム開発は、そのアーキテクチャを理解することから始まる体系的なプロセスです。正しい開発環境の構築、標準に準拠したプラグインの骨格の作成、そしてコアプロセスに介入または変更を加えるためのフックシステム(アクションやフィルター)の深い理解まで、すべてのステップがユニークな機能を構築するための基盤となります。カスタムの商品タイプやメタフィールドを作成することで、複雑なビジネスニーズに応じてデータモデルを拡張することができます。最後に、ショッピングカートや決済プロセスにインタラクションやデータを巧みに組み込むことで、ユーザー体験と運営効率を直接向上させることができます。常にベストプラクティスに従い、十分なテストの実施、コードのセキュリティの確保、適切なドキュメントの維持に注意を払うことが重要です。 WooCommerce WordPressのコア部分が更新されることで、あなたが開発したプラグインが安定して動作し、効率的であり、長期的に利用できるようになります。
FAQ よくある質問
WooCommerceプラグインを開発するには、どのような前提知識が必要ですか?
WooCommerceプラグインの開発には、確かなPHPプログラミングの基礎が必要です。オブジェクト指向プログラミング(OOP)の概念にも精通している必要があります。また、WordPressのコアメカニズム、つまりフックシステム(アクションとフィルター)、カスタム記事タイプ、メタデータ、そしてプラグインやテーマの標準的な構造についても深い理解が求められます。基本的なHTML、CSS、JavaScriptの知識も、フロントエンドのインタラクションを実現する上で非常に役立ちます。
カスタムWooCommerceプラグインの問題をどのようにデバッグするのでしょうか?
まず、確認してください。 wp-config.php ファイル内で有効になっています。 WP_DEBUG と WP_DEBUG_LOGエラーをログファイルに記録します。次に、その情報を十分に活用してください。 WooCommerce 内蔵のログシステムにより、 wc_get_logger() 関数は重要なタイミングで情報を記録します。フロントエンドに関する問題については、ブラウザの開発者ツール(コンソールやネットワークパネル)を使用して調査してください。また、他のプラグインを一時的に無効にしてデフォルトのテーマに切り替えることで、競合や干渉を排除することができます。
価格フィルターを変更しましたが、なぜバックエンドの商品リストの価格も変わってしまったのでしょうか?
これはよくある問題です。多くの価格に関連するフィルターは、フロントエンドとバックエンドの両方に影響を与えます。このような状況を避けるためには、フィルター関数内で条件判断を行い、その作用範囲を制限する必要があります。通常、このような処理が行われます。 is_admin() && ! defined( 'DOING_AJAX' ) 現在の状態がバックエンド管理インターフェースであるかどうかを確認し、AJAXリクエストが実行されていないかをチェックします(ショッピングカートの更新などの操作はAJAXを通じて行われ、価格計算が必要です)。以前の例では、この処理方法を既に示しました。
カスタムメイドの商品タイプが注文書に「シンプル商品」として表示されてしまう場合、どう対処すればよいでしょうか?
これはなぜかというと… WooCommerce 注文に商品のスナップショットを保存する際、デフォルトではカスタムタイプが正しく認識されない場合があります。商品をカートに追加する際には、そのタイプ情報が正しく伝達されるようにしてください。ご確認ください。 WC_Product_Custom このクラスは正しく継承されていますか? WC_Product そして、設定も完了しました。 $this->product_type。さらに、注文から商品を受け取る際には、WooCommerce 基本的なインスタンスが作成される可能性があります。 WC_Product オブジェクトです。正しくインスタンス化するためには、以下の手順を使用する必要がある場合があります: woocommerce_order_get_items フィルターを使用して、カスタム定義したタイプをマッピングします。
自作のプラグインが将来のWooCommerceのアップデートと互換性を持つようにするには、どうすればよいでしょうか?
コンパチビリティを維持する鍵は、公式の開発手法と同期を保つことです。常に公式の方法を使用してください。 WooCommerce 公開されているAPIやフックを利用し、コアファイルの直接の変更や非公開のクラス・メソッドの使用は避けてください。プラグインのヘッダ情報内で、互換性があることを正確に宣言してください。 WooCommerce Version)WC tested up to定期的に WooCommerce テスト版または最新版でテストを行ってください。フォローしてください。 WooCommerce 公式の開発ブログや更新ログをチェックすることで、将来廃止される機能や新しいAPIについて情報を得ることができます。
次はどうする?
拡大読書と実践的知識
以下は、この記事のトピックに関連しており、さらに深く読むのに適している。あなたの現在の問題に最も近い記事から優先順位をつけ、徐々に周辺のトピックに広げていく方が良い場合が多い。