programing

WooCommerce Subscriptions - 제품에 이미 활성 가입자가 있는지 확인합니다.

muds 2023. 7. 15. 10:41
반응형

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

반응형