반응형
WooCommerce Subscriptions - 제품에 이미 활성 가입자가 있는지 확인합니다.
"WooCommerce Subscriptions" 플러그인을 사용하고 있는데 제품에 시스템에 이미 활성 가입자가 있는지 확인하고 싶습니다.
저는 제품당 1명의 가입자만 원합니다.확인할 수 있는 필터가 있지만 사용 방법을 모르겠습니다.
https://docs.woocommerce.com/document/subscriptions/develop/filter-reference/
이를 위해 그 기능이나 후크를 어떻게 사용할 수 있습니까?
감사해요.
가입자가 이미 가입 제품을 사용하고 있는 경우 이 사용자 지정 조건부 기능이 반환됩니다.
function has_an_active_subscriber( $product_id = null ){
// Empty array to store ALL existing Subscription PRODUCTS
$products_arr = array();
$products_subscr = get_posts( array(
'numberposts' => -1,
'post_status' => 'publish',
'post_type' => array( 'product', 'product_variation' ),
'meta_key' => '_subscription_price',
) );
foreach( $products_subscr as $prod_subs ) {
$products_arr[] = $prod_subs->ID;
}
// Testing if current product is a subscription product
if (in_array( $product_id, $products_arr) ){
// Declaring empties arrays
$subscribers_arr = array(); // ALL subscribers IDS
$active_subscriptions_arr = array(); // ALL actives subscriptions
$active_subscription_products_arr = array(); // ALL actif subscription products IDS IDS
$subscriber_subscriptions = array();
// Getting arrays of "active" IDS for subscribers, subscriptions orders and subscription products
$subscribers = get_users( array( 'role' => 'subscriber') );
foreach( $subscribers as $subscriber ) {
$subscriber_arr[] = $subscriber->ID;
$subscriptions = wcs_get_users_subscriptions($subscriber->ID);
foreach ($subscriptions as $key => $subscription ){
$subscription_status = $subscription->post->post_status;
if ( $subscription_status == 'wc-active' ) { // active subscriptions only
$subscription_id = $subscription->post->ID;
$order_id = $subscription->order->post->ID; // order ID (corresponding to the subscription ID)
$active_subscriptions_arr[] = $subscription->post->ID;
$order_items = $subscription->order->get_items();
// Getting all the products in the Order
foreach ( $order_items as $item ) {
// $item_id = $item[product_id];
// Avoiding to add existing products in the array
if( !in_array( $product_id, $active_subscription_products_arr ))
$active_subscription_products_arr[] = $item[product_id];
}
}
}
}
}
if (in_array( $product_id, $active_subscription_products_arr ) ) return true;
else return false;
}
이 코드는 작동합니다.활성 하위 테마(또는 테마) 또는 플러그인 파일의 php.
정의된 사용자 ID에 대한 구독을 코드에서 얻기 위해 여기서 기본 구독 기능을 사용했습니다.
사용. (정의된 $product_id 변수의 경우)
If ( has_an_active_subscriber( $product->id ) ) { // or $product_id // This product is already used by an active subscriber // DO SOMETHING HERE } else { // This product is NOT used // DO SOMETHING HERE }
교체할 수도 있습니다.
$product_id
예를 들어 제품 ID가 124인 경우 여기에 있는 제품 ID로 표시됩니다.If ( has_an_active_subscriber( 124 ) ) //do something
특히 (구독) 템플릿(구독 플러그인 템플릿 폴더에서 활성 테마의 woocommerce 템플릿 폴더로 복사해야 함)에서 이 조건부 기능을 사용할 수 있습니다.
모든 코드가 테스트되고 완전히 작동합니다.
참조:
언급URL : https://stackoverflow.com/questions/39095349/woocommerce-subscriptions-check-if-product-already-has-an-active-subscriber
반응형
'programing' 카테고리의 다른 글
Oracle에서 no_data_found ORA-01403이 예외인 이유는 무엇입니까? (0) | 2023.07.15 |
---|---|
vuex + typescript + 네임스페이스 모듈: 다른 모듈 상태 액세스 (0) | 2023.07.15 |
외부 키는 SQL Server에서 자동으로 인덱싱됩니까? (0) | 2023.07.15 |
날짜 사이의 Excel SUMIF (0) | 2023.07.15 |
정보 손실 없이 인자를 정수\숫자로 변환하는 방법은 무엇입니까? (0) | 2023.07.15 |