[TOC]
鉤子和過濾器是WooCommerce中非常重要的概念,它們可以讓開發人員在WooCommerce的核心代碼中添加自定義代碼,以擴展和定制平臺。下面是WooCommerce的鉤子和過濾器的詳細介紹:
# WooCommerce的鉤子和過濾器
### 鉤子
鉤子(Hook)是WooCommerce中的一種機制,它可以讓開發人員在WooCommerce的核心代碼中添加自定義代碼。鉤子本質上是一種回調函數,當WooCommerce的某個事件發生時,鉤子會自動調用回調函數。WooCommerce提供了許多鉤子,可以幫助開發人員在WooCommerce的各個階段添加自定義功能。
#### 1\. 動作鉤子(Action Hook)
動作鉤子(Action Hook)是一種特殊的鉤子,它可以讓開發人員在WooCommerce的某個事件發生時執行自定義代碼。動作鉤子本身不返回任何值,只是執行一些操作,例如添加產品、更新訂單等。動作鉤子的格式如下:
~~~
do_action($hook_name, $args);
~~~
其中,$hook\_name是鉤子的名稱,$args是傳遞給回調函數的參數。下面是一些常用的動作鉤子:
* `woocommerce_before_main_content`:在主內容區域之前添加內容。
* `woocommerce_after_main_content`:在主內容區域之后添加內容。
* `woocommerce_before_cart`:在購物車頁面之前添加內容。
* `woocommerce_after_cart`:在購物車頁面之后添加內容。
* `woocommerce_before_checkout_form`:在結算頁面之前添加內容。
* `woocommerce_after_checkout_form`:在結算頁面之后添加內容。
#### 2\. 過濾器鉤子(Filter Hook)
過濾器鉤子(Filter Hook)是一種特殊的鉤子,它可以讓開發人員在WooCommerce的某個事件發生時修改數據。過濾器鉤子本身不執行任何操作,只是修改數據并返回修改后的結果。過濾器鉤子的格式如下:
~~~
apply_filters($hook_name, $value, $args);
~~~
其中,$hook\_name是鉤子的名稱,$value是需要修改的數據,$args是傳遞給回調函數的參數。下面是一些常用的過濾器鉤子:
* `woocommerce_product_get_price`:修改產品的價格。
* `woocommerce_cart_item_price`:修改購物車中產品的單價。
* `woocommerce_checkout_fields`:修改結算頁面的表單字段。
* `woocommerce_billing_fields`:修改賬單地址表單字段。
* `woocommerce_shipping_fields`:修改配送地址表單字段。
### 過濾器
過濾器(Filter)是WooCommerce中的另一種機制,它可以讓開發人員在WooCommerce的核心代碼中修改數據。過濾器本質上也是一種回調函數,當WooCommerce的某個事件發生時,過濾器會自動調用回調函數,并且將數據作為參數傳遞給回調函數。回調函數可以修改數據,并返回修改后的結果。WooCommerce提供了許多過濾器,可以幫助開發人員修改WooCommerce中的數據。
#### 1\. 簡單過濾器
簡單過濾器可以修改數據的值,而不需要修改數據的結構。簡單過濾器的格式如下:
~~~
apply_filters($hook_name, $value, $args);
~~~
其中,$hook\_name是過濾器的名稱,$value是需要修改的數據,$args是傳遞給回調函數的參數。下面是一些常用的簡單過濾器:
* `woocommerce_cart_item_price`:修改購物車中產品的單價。
* `woocommerce_product_get_price`:修改產品的價格。
* `woocommerce_product_get_regular_price`:修改產品的常規價格。
#### 2\. 復雜過濾器
復雜過濾器可以修改數據的結構,例如添加、刪除或替換數據。復雜過濾器的格式如下:
~~~
apply_filters($hook_name, $value, $args);
~~~
其中,$hook\_name是過濾器的名稱,$value是需要修改的數據,$args是傳遞給回調函數的參數。下面是一些常用的復雜過濾器:
* `woocommerce_checkout_fields`:修改結算頁面的表單字段。
* `woocommerce_billing_fields`:修改賬單地址表單字段。
* `woocommerce_shipping_fields`:修改配送地址表單字段。
* `woocommerce_payment_gateways`:添加、修改或刪除支付網關。
需要注意的是,WooCommerce的鉤子和過濾器非常強大,但也需要開發人員謹慎使用。過度使用鉤子和過濾器可能會導致代碼混亂和性能問題。在使用鉤子和過濾器時,開發人員應該遵循最佳實踐和安全建議,例如不直接修改核心代碼、使用唯一的鉤子名稱、測試代碼等。
# 鉤子
WooCommerce提供了大量的鉤子(Hooks),可以幫助開發人員擴展和定制平臺。以下是鉤子按功能分類的整理:
### 1\. 購物車
* `woocommerce_add_cart_item_data`:在向購物車添加產品時保存額外的數據。
* `woocommerce_add_to_cart_validation`:在向購物車添加產品之前驗證產品是否可以添加。
* `woocommerce_after_cart_item_quantity_update`:在購物車中的產品數量更新后執行操作。
* `woocommerce_cart_calculate_fees`:計算購物車中的費用。
* `woocommerce_cart_contents`:在購物車中添加、更新或刪除產品時執行操作。
* `woocommerce_cart_item_removed`:在購物車中刪除產品時執行操作。
* `woocommerce_cart_item_restored`:在購物車中恢復已刪除的產品時執行操作。
* `woocommerce_cart_loaded_from_session`:在購物車從會話中加載時執行操作。
* `woocommerce_checkout_create_order_line_item`:在結算頁面創建訂單行項目時執行操作。
* `woocommerce_checkout_create_order_product`:在結算頁面創建訂單產品時執行操作。
* `woocommerce_checkout_order_processed`:在處理結算頁面訂單時執行操作。
* `woocommerce_checkout_update_order_review`: 在結算頁面更新訂單審查時執行操作。
* `woocommerce_clear_cart_after_payment`:在支付后清空購物車時執行操作。
* `woocommerce_remove_cart_item`:在從購物車中刪除產品時執行操作。
* `woocommerce_update_cart_action_cart_updated`:在更新購物車時執行操作。
* `woocommerce_update_cart_validation`:在更新購物車之前驗證購物車是否可以更新。
### 2\. 訂單
* `woocommerce_admin_order_actions`:在后臺訂單操作菜單中添加自定義操作。
* `woocommerce_after_order_itemmeta`:在訂單項元數據后添加內容。
* `woocommerce_after_order_item_quantity_update`:在訂單中的產品數量更新后執行操作。
* `woocommerce_after_order_notes`:在訂單備注后添加內容。
* `woocommerce_after_shop_order_form`:在訂單表單后添加內容。
* `woocommerce_before_order_itemmeta`:在訂單項元數據前添加內容。
* `woocommerce_before_order_notes`:在訂單備注前添加內容。
* `woocommerce_before_shop_order_form`:在訂單表單前添加內容。
* `woocommerce_checkout_order_processed`:在處理結算頁面訂單時執行操作。
* `woocommerce_order_actions`:在訂單操作菜單中添加自定義操作。
* `woocommerce_order_item_add_action_buttons`:在訂單項操作按鈕后添加內容。
* `woocommerce_order_item_meta_end`:在訂單項元數據后添加內容。
* `woocommerce_order_item_meta_start`:在訂單項元數據前添加內容。
* `woocommerce_order_status_changed`:在訂單狀態更改時執行操作。
* `woocommerce_payment_complete`:在訂單支付完成時執行操作。
* `woocommerce_payment_complete_order_status`:在訂單支付完成時更改訂單狀態。
* `woocommerce_save_order_items`:在訂單項保存之前執行操作。
* `woocommerce_thankyou`:在訂單完成頁面添加內容。
### 3\. 產品
* `woocommerce_add_to_cart`:在向購物車添加產品時執行操作。
* `woocommerce_after_add_to_cart_button`:在添加到購物車按鈕后添加內容。
* `woocommerce_after_shop_loop_item`:在產品列表項后添加內容。
* `woocommerce_before_add_to_cart_button`:在添加到購物車按鈕前添加內容。
* `woocommerce_before_shop_loop_item`:在產品列表項前添加內容。
* `woocommerce_get_availability`:獲取產品的庫存狀態。
* `woocommerce_product_add_to_cart_text`:更改添加到購物車按鈕的文本。
* `woocommerce_product_get_price`:獲取產品價格。
* `woocommerce_product_get_regular_price`:獲取產品常規價格。
* `woocommerce_product_options_general_product_data`:在產品編輯頁面添加自定義選項。
* `woocommerce_product_quick_edit_end`:在快速編輯產品頁面末尾添加內容。
* `woocommerce_product_quick_edit_start`:在快速編輯產品頁面開頭添加內容。
* `woocommerce_product_tabs`:添加自定義產品選項卡。
* `woocommerce_single_product_summary`:在產品摘要部分添加內容。
* `woocommerce_single_product_add_to_cart_text`:更改單個產品頁面上添加到購物車按鈕的文本。
* `woocommerce_single_product_image_thumbnail_html`:修改產品縮略圖的HTML。
* `woocommerce_single_product_summary`:在產品摘要部分添加內容。
* `woocommerce_single_product_title`:修改單個產品頁面上的產品標題。
### 4\. 支付
* `woocommerce_available_payment_gateways`:獲取可用的支付網關。
* `woocommerce_checkout_before_order_review`:在訂單審查之前添加內容。
* `woocommerce_checkout_order_processed`:在處理結算頁面訂單時執行操作。
* `woocommerce_checkout_process`:在處理結算頁面之前驗證訂單是否可以處理。
* `woocommerce_payment_complete`:在訂單支付完成時執行操作。
* `woocommerce_payment_gateways`:添加、修改或刪除支付網關。
* `woocommerce_review_order_before_payment`:在訂單支付之前添加內容。
### 5. 用戶和會員
* `woocommerce_account_dashboard`:在用戶帳戶儀表板上添加內容。
* `woocommerce_after_my_account`:在用戶帳戶頁面之后添加內容。
* `woocommerce_before_lost_password_form`:在丟失密碼表單之前添加內容。
* `woocommerce_before_login_form`:在登錄表單之前添加內容。
* `woocommerce_before_my_account`:在用戶帳戶頁面之前添加內容。
* `woocommerce_customer_save_address`:在保存地址時執行操作。
* `woocommerce_login_redirect`:更改用戶登錄后的重定向頁面。
* `woocommerce_login_form_end`:在登錄表單末尾添加內容。
* `woocommerce_login_form_start`:在登錄表單開頭添加內容。
* `woocommerce_lost_password_form`:在丟失密碼表單中添加內容。
* `woocommerce_register_form_end`:在注冊表單末尾添加內容。
* `woocommerce_register_form_start`:在注冊表單開頭添加內容。
* `woocommerce_registration_redirect`:更改用戶注冊后的重定向頁面。
* `woocommerce_reset_password_message`:更改重置密碼電子郵件的內容。
* `woocommerce_review_order_after_submit`:在訂單提交按鈕之后添加內容。
* `woocommerce_review_order_before_submit`:在訂單提交按鈕之前添加內容### 6. 其他
* `woocommerce_email_header`:修改電子郵件頭部。
* `woocommerce_email_order_meta`:在電子郵件訂單元數據下添加內容。
* `woocommerce_email_order_details`:在電子郵件訂單詳細信息下添加內容。
* `woocommerce_email_order_meta_fields`:在電子郵件訂單元數據字段下添加內容。
* `woocommerce_email_footer`:修改電子郵件頁腳。
* `woocommerce_email_recipient_new_order`:更改新訂單電子郵件的收件人。
* `woocommerce_email_subject_new_order`:更改新訂單電子郵件的主題。
* `woocommerce_email_headers`:更改電子郵件頭部。
* `woocommerce_email_from_address`:更改電子郵件發送者地址。
* `woocommerce_email_from_name`:更改電子郵件發送者名稱。
* `woocommerce_email_content_type`:更改電子郵件內容類型。
* `woocommerce_email_attachments`:添加附件到電子郵件。
* `woocommerce_after_template_part`:在模板部分后添加內容。
* `woocommerce_before_template_part`:在模板部分前添加內容。
* `woocommerce_get_sections_settings`:獲取設置頁面的節。
* `woocommerce_settings_tabs_array`:獲取設置頁面的標簽。
* `woocommerce_settings_sections`:獲取設置頁面的節和標簽。
* `woocommerce_admin_fee_rows`:在訂單費用表格中添加自定義費用行。
* `woocommerce_admin_order_preview_end`:在后臺訂單預覽頁面末尾添加內容。
* `woocommerce_admin_order_preview_start`:在后臺訂單預覽頁面開頭添加內容。
* `woocommerce_admin_order_totals_after_discount`:在訂單總計表格中折扣后添加自定義行。
* `woocommerce_admin_order_totals_after_shipping`:在訂單總計表格中運費后添加自定義行。
* `woocommerce_admin_order_totals_before_discount`:在訂單總計表格中折扣之前添加自定義行。
* `woocommerce_admin_order_totals_before_shipping`:在訂單總計表格中運費之前添加自定義行。
* `woocommerce_admin_order_totals_after_order_total`:在訂單總計表格中訂單總計后添加自定義行。
* `woocommerce_admin_order_totals_after_tax`:在訂單總計表格中稅后添加自定義行。
* `woocommerce_admin_order_totals_before_order_total`:在訂單總計表格中訂單總計之前添加自定義行。
這只是鉤子的一小部分,WooCommerce提供的鉤子數量非常多,可以滿足開發人員的大部分需求。使用這些鉤子,開發人員可以輕松地定制和擴展WooCommerce平臺,以滿足他們的客戶需求。
## 常用鉤子和過濾器
### 產品頁面
* `woocommerce_product_tabs`:更改產品頁選項卡的順序和內容。
* `woocommerce_single_product_summary`:更改單個產品頁概述區域的內容和布局。
* `woocommerce_after_single_product_summary`:在單個產品頁概述區域之后添加自定義內容。
* `woocommerce_before_add_to_cart_button`:在添加到購物車按鈕之前添加自定義內容。
* `woocommerce_after_add_to_cart_button`:在添加到購物車按鈕之后添加自定義內容。
* `woocommerce_product_add_to_cart_text`:更改添加到購物車按鈕的文本。
### 購物車和結賬頁面
* `woocommerce_before_calculate_totals`:在計算購物車總價之前執行自定義操作。
* `woocommerce_cart_shipping_packages`:更改購物車中的配送包裝。
* `woocommerce_shipping_package_name`:更改配送包裝的名稱。
* `woocommerce_calculated_shipping`:在計算配送費用時執行自定義操作。
* `woocommerce_review_order_before_submit`:在訂單提交按鈕之前添加自定義內容。
* `woocommerce_checkout_billing`:更改結賬頁賬單地址表格的 HTML。
* `woocommerce_checkout_shipping`:更改結賬頁配送地址表格的 HTML。
* `woocommerce_checkout_order_review`:更改結賬頁訂單總計表格的 HTML。
* `woocommerce_checkout_payment`:更改結賬頁付款表格的 HTML。
* `woocommerce_available_payment_gateways`:更改可用的支付網關。
### 訂單和支付
* `woocommerce_add_to_cart_validation`:驗證添加到購物車的產品是否有效。
* `woocommerce_add_cart_item_data`:將自定義數據添加到購物車項目中。
* `woocommerce_get_cart_item_from_session`:從會話中檢索購物車項目。
* `woocommerce_add_order_item_meta`:將元數據添加到訂單項中。
* `woocommerce_checkout_order_processed`:在訂單被處理之后執行自定義操作。
* `woocommerce_order_status_changed`:在訂單狀態更改時執行自定義操作。
* `woocommerce_payment_complete_order_status`:更改訂單完成后的狀態。
* `woocommerce_payment_complete`:在支付完成后執行自定義操作。
* `woocommerce_admin_order_actions`:添加自定義操作按鈕到訂單操作下拉菜單中。
* `woocommerce_admin_order_data_after_billing_address`:在訂單管理頁面添加自定義數據到賬單地址下方。
* `woocommerce_admin_order_data_after_shipping_address`:在訂單管理頁面添加自定義數據到配送地址下方。
* `woocommerce_admin_order_data_after_order_details`:在訂單管理頁面添加自定義數據到訂單詳細信息下方。
* `woocommerce_admin_order_data_after_order_total`:在訂單管理頁面添加自定義數據到訂單總計下方。
### 電子郵件
* `woocommerce_email_header`:更改電子郵件標題和頭部區域的 HTML。
* `woocommerce_email_order_details`:更改電子郵件訂單詳細信息的 HTML。
* `woocommerce_email_order_meta`:更改電子郵件訂單元數據的 HTML。
* `woocommerce_email_order_item_quantity`:更改電子郵件訂單商品數量的 HTML。
* `woocommerce_email_order_item_meta`:更改電子郵件訂單商品元數據的 HTML。
* `woocommerce_email_order_items_table`:更改電子郵件訂單項目表格的 HTML。
* `woocommerce_email_order_item_totals`:更改電子郵件訂單項目總計的 HTML。
* `woocommerce_email_footer`:更改電子郵件頁腳區域的 HTML。
- 系統設計
- 需求分析
- 概要設計
- 詳細設計
- 邏輯模型設計
- 物理模型設計
- 產品設計
- 數據驅動產品設計
- 首頁
- 邏輯理解
- 微服務架構的關系數據庫優化
- Java基礎架構
- 編程范式
- 面向對象編程【模擬現實】
- 泛型編程【參數化】
- 函數式編程
- 響應式編程【異步流】
- 并發編程【多線程】
- 面向切面編程【代碼復用解耦】
- 聲明式編程【注解和配置】
- 函數響應式編程
- 語法基礎
- 包、接口、類、對象和切面案例代碼
- Springboot按以下步驟面向切面設計程序
- 關鍵詞
- 內部類、匿名類
- 數組、字符串、I/O
- 常用API
- 并發包
- XML
- Maven 包管理
- Pom.xml
- 技術框架
- SpringBoot
- 項目文件目錄
- Vue
- Vue項目文件目錄
- 遠程組件
- 敏捷開發前端應用
- Pinia Store
- Vite
- Composition API
- uniapp
- 本地方法JNI
- 腳本機制
- 編譯器API
- 注釋
- 源碼級注釋
- Javadoc
- 安全
- Swing和圖形化編程
- 國際化
- 精實或精益
- 精實軟件數據庫設計
- 精實的原理與方法
- 項目
- 零售軟件
- 擴展
- 1001_docker 示例
- 1002_Docker 常用命令
- 1003_微服務
- 1004_微服務數據模型范式
- 1005_數據模型
- 1006_springCloud
- AI 流程圖生成
- Wordpress_6
- Woocommerce_7
- WooCommerce常用的API和幫助函數
- WooCommerce的鉤子和過濾器
- REST API
- 數據庫API
- 模板系統
- 數據模型
- 1.Woo主題開發流程
- Filter
- Hook
- 可視編輯區域的函數工具
- 渲染字段函數
- 類庫和框架
- TDD 通過測試來驅動開發
- 編程范式對WordPress開發
- WordPress和WooCommerce的核心代碼類庫組成
- 數據庫修改
- 1.WP主題開發流程與時間規劃
- moho
- Note 1
- 基礎命令