概要
woocommerce_order_is_pending_statuses
フィルタは、WooCommerce における注文のステータスが「保留中」(Pending) である場合に、どのステータスが含まれるべきかを変更するために使用されます。このフィルタは、注文のワークフローや通知に関連する機能の実装に使われることが多いです。具体的には以下のような場面で使用されることがあります。
- 特定の条件に基づいてステータスをカスタマイズする。
- 新しいカスタムステータスを追加する。
- パートナーシップやプロモーションに基づく特別なステータス管理。
- ユーザーの操作に応じて異なるトリガーを設定する。
- 各種アプリケーションとの統合時にフィルタリングする。
- 受注処理フローを独自のビジネスニーズに合わせて調整する。
このフィルタを使用する際には、WordPress のバージョンが 5.0 以上かつ WooCommerce のバージョンが 3.0 以上である必要があります。
構文
add_filter( 'woocommerce_order_is_pending_statuses', 'custom_pending_order_statuses' );
function custom_pending_order_statuses( $pending_statuses ) {
// 追加のステータスを処理
return $pending_statuses;
}
パラメータ
$pending_statuses
: 現在の保留中ステータスの配列
戻り値
- $pending_statuses: 修正された保留中ステータスの配列
使用例
以下に、woocommerce_order_is_pending_statuses
フィルタを利用したサンプルコードを示します。
1. サンプルコード: ステータスの追加
add_filter( 'woocommerce_order_is_pending_statuses', 'add_custom_pending_status' );
function add_custom_pending_status( $pending_statuses ) {
$pending_statuses[] = 'custom-pending'; // カスタムステータスを追加
return $pending_statuses;
}
このコードは、カスタムステータス「custom-pending」を保留中ステータスに追加します。
2. サンプルコード: ステータスの条件付き削除
add_filter( 'woocommerce_order_is_pending_statuses', 'remove_specific_pending_status' );
function remove_specific_pending_status( $pending_statuses ) {
if ( current_user_can( 'administrator' ) ) {
$pending_statuses = array_diff( $pending_statuses, array( 'on-hold' ) ); // 管理者の場合、"on-hold"を削除
}
return $pending_statuses;
}
このコードは、管理者ユーザーに対して「on-hold」ステータスを削除します。
3. サンプルコード: 特定の条件でのステータス変更
add_filter( 'woocommerce_order_is_pending_statuses', 'conditional_pending_status' );
function conditional_pending_status( $pending_statuses ) {
if ( is_product() && get_the_ID() == 123 ) { // 商品IDが123の場合
$pending_statuses[] = 'special-pending'; // 特別ステータスを追加
}
return $pending_statuses;
}
このコードは、特定の商品ページにおいて「special-pending」ステータスを追加します。
4. サンプルコード: ステータスの配列をログ出力
add_filter( 'woocommerce_order_is_pending_statuses', 'log_pending_statuses' );
function log_pending_statuses( $pending_statuses ) {
error_log( print_r( $pending_statuses, true ) ); // ステータスをログに出力
return $pending_statuses;
}
このコードは、保留中ステータスの内容をログに出力します。
5. サンプルコード: セキュリティチェック
add_filter( 'woocommerce_order_is_pending_statuses', 'security_check_pending_status' );
function security_check_pending_status( $pending_statuses ) {
if ( ! is_user_logged_in() ) {
return array(); // ログインしていない場合、空の配列を返却
}
return $pending_statuses;
}
このコードは、ユーザーがログインしていない場合、保留中ステータスを無効化します。
この関数のアクションでの使用可能性
アクション | 使用例 |
---|---|
mu_plugin_loaded | |
registered_post_type | |
plugins_loaded | 〇 |
wp_roles_init | |
setup_theme | |
after_setup_theme | |
set_current_user | |
init | 〇 |
register_sidebar | |
wp_loaded | 〇 |
send_headers | |
parse_query | |
pre_get_posts | |
wp | 〇 |
template_redirect | |
get_header | |
wp_head |
この表は、woocommerce_order_is_pending_statuses
フィルタが各アクションで使用される可能性を示しています。