プラグインWooCommerceのwoocommerce_product_set_visibilityアクションの使用方法・解説

概要

woocommerce_product_set_visibility アクションは、WooCommerceにおいて製品の可視性を変更する際に発火するフックです。このアクションは、製品の公開状況を制御する際に便利であり、以下のような機能を実装する際によく使用されます。

  1. 製品の非公開ステータスに変更
  2. 特定の条件に基づく製品の表示/非表示
  3. 定期的なセールやキャンペーンの為の製品の手動調整
  4. フィルタリング機能を用いた特定のカテゴリー製品の非表示
  5. ユーザー権限に応じた製品の可視性制御
  6. 在庫状況に基づいた製品の表示制御

構文

do_action('woocommerce_product_set_visibility', $product_id, $visibility);

パラメータ

  • $product_id (int): 可視性が設定される製品のID
  • $visibility (string): 新しい可視性ステータス (‘visible’, ‘catalog’, ‘search’, ‘hidden’など)

戻り値

このアクションは値を返さないため、戻り値はありません。

使用可能なバージョン

  • WooCommerceのバージョン: 3.0.0
  • WordPressのバージョン: 4.0.0

この関数のアクションでの使用可能性

アクション 使用例
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

サンプルコード

サンプル1: 製品の可視性を変更する

add_action('woocommerce_product_set_visibility', 'custom_change_product_visibility', 10, 2);
function custom_change_product_visibility($product_id, $visibility) {
    // 特定の条件が満たされた場合に可視性を変更する
    if ($visibility === 'hidden' && is_user_logged_in()) {
        // ユーザーがログインしている場合、製品を表示
        update_post_meta($product_id, '_visibility', 'visible');
    }
}

このサンプルでは、ユーザーがログインしている場合に製品の可視性を「visible」に変更しています。

サンプル2: 特定のカテゴリー製品を非表示に

add_action('woocommerce_product_set_visibility', 'hide_specific_category_product', 10, 2);
function hide_specific_category_product($product_id, $visibility) {
    // 特定のカテゴリーに属する製品の場合、可視性を非表示に
    if (has_term('特定のカテゴリー', 'product_cat', $product_id)) {
        update_post_meta($product_id, '_visibility', 'hidden');
    }
}

特定のカテゴリーに属する製品が非表示になるように設定しています。

サンプル3: 在庫がない製品の可視性を調整する

add_action('woocommerce_product_set_visibility', 'adjust_visibility_for_out_of_stock', 10, 2);
function adjust_visibility_for_out_of_stock($product_id, $visibility) {
    // 在庫がない場合は、その製品を非表示にする
    if ('outofstock' === get_post_meta($product_id, '_stock_status', true)) {
        update_post_meta($product_id, '_visibility', 'hidden');
    }
}

このサンプルは、在庫がない場合に製品を非表示にする処理です。

サンプル4: 管理者向けの可視性管理

add_action('woocommerce_product_set_visibility', 'admin_only_product_visibility', 10, 2);
function admin_only_product_visibility($product_id, $visibility) {
    // 管理者以外のユーザーには製品を非表示に設定
    if (!current_user_can('administrator')) {
        update_post_meta($product_id, '_visibility', 'hidden');
    }
}

このコードでは、管理者以外のすべてのユーザーに対して製品を非表示にします。

サンプル5: セール期間中の製品を表示

add_action('woocommerce_product_set_visibility', 'show_sale_products', 10, 2);
function show_sale_products($product_id, $visibility) {
    $is_on_sale = get_post_meta($product_id, '_sale_price', true);
    if (!empty($is_on_sale)) {
        update_post_meta($product_id, '_visibility', 'visible');
    }
}

このサンプルは、製品がセール中の場合は表示するように設定しています。

この関数について質問する


上の計算式の答えを入力してください