概要
woocommerce_product_set_visibility
アクションは、WooCommerceにおいて製品の可視性を変更する際に発火するフックです。このアクションは、製品の公開状況を制御する際に便利であり、以下のような機能を実装する際によく使用されます。
- 製品の非公開ステータスに変更
- 特定の条件に基づく製品の表示/非表示
- 定期的なセールやキャンペーンの為の製品の手動調整
- フィルタリング機能を用いた特定のカテゴリー製品の非表示
- ユーザー権限に応じた製品の可視性制御
- 在庫状況に基づいた製品の表示制御
構文
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');
}
}
このサンプルは、製品がセール中の場合は表示するように設定しています。