Скрыть кнопку «Добавить в корзину» на 1 день после заказа товара, для того товара, который заказал пользователь - PullRequest
0 голосов
/ 02 июля 2019

Я добавил новое настраиваемое поле на странице оформления заказа с именем " Date of event ", оно работает нормально. Но я хочу сделать одну вещь: «Когда пользователь заказывает один / несколько продуктов, затем скрыть кнопку "Add to cart" и показать недоступное сообщение вместо кнопки для выбранной даты события». Например, если пользователь выбрал дату " 7/2/2019 " в " Date of event field " во время оформления заказа, затем после того, как он заказал этот товар, скрыть кнопку «Добавить в корзину» и отобразить недоступное сообщение вместо кнопки для " 7/2/2019 " даты события. Я не знаю, как это сделать.
Какие хуки и действия сделают это.
Я много гуглил, но ответа не получил.

Пожалуйста, помогите мне.

Код настраиваемого поля:

add_action('woocommerce_after_checkout_billing_form', 'date_of_event_field');

function date_of_event_field($checkout){

    echo '<div id="date_of_event_field" class="margin-top-20">';

        woocommerce_form_field( 'date_of_event', array(
            'type'          => 'date',
            'class'         => array('my-field-class form-row-wide'),
            'label'         => __('Date Of Event'),
            'required'      => true,
        ), $checkout->get_value( 'date_of_event' ));

    echo '</div>';

}

Код для скрытия Добавить в корзину кнопку и показать сообщение вместо кнопки:

function make_product_unavailable( $_product, $order ) {
    if( $order->id == $_product ){
        remove_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart');
        remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart');
    }
}

Это попытка с моей стороны, потому что я не знаю, как это сделать, и я не знаю, какой фильтр / ловушка действий будет использоваться для этого.

Пожалуйста, помогите мне.

1 Ответ

0 голосов
/ 02 июля 2019

Источник: https://wisdmlabs.com/blog/the-right-way-to-hide-add-to-cart-button-in-woocommerce/

Проверьте, приобрел ли клиент определенные продукты в WooCommerce

Примечание: приведенный ниже код не тестируется, но он будет работать, если какая-то часть будет изменена в соответствии с вашими требованиями.

add_filter( 'woocommerce_is_purchasable', 'hidecart',10,1);
function hidecart(){
 $found = has_bought_items();
 if(!empty($found["order_date"])){
    $current_date = date("d/m/Y");
    if($found["order_date"] == $current_date && $found["product_id"] == get_the_ID()){
        return false;
    }
 }
}

function has_bought_items() 
{
 $bought = false;
 $order_date =  '';
 //get product id if single or for shop page u will have to retrieve in some other way
$product_id = get_the_ID();

// Get all customer orders
$customer_orders = get_posts( array(
    'numberposts' => -1,
    'meta_key'    => '_customer_user',
    'meta_value'  => get_current_user_id(),
    'post_type'   => 'shop_order', // WC orders post type
    'post_status' => 'wc-completed' // Only orders with status "completed"
) );
foreach ( $customer_orders as $customer_order ) {
    // Updated compatibility with WooCommerce 3+
    $order_id = method_exists( $order, 'get_id' ) ? $order->get_id() : $order->id;
    $order = wc_get_order( $customer_order );

    // Iterating through each current customer products bought in the order
    foreach ($order->get_items() as $item) {
        // WC 3+ compatibility
        if ( version_compare( WC_VERSION, '3.0', '<' ) ) 
            $order_product_id = $item['product_id'];
        else
            $order_product_id = $item->get_product_id();

        // Your condition related to your 2 specific products Ids
        if ( $product_id == $product_id) ) {
            $bought = true;
            $order_date = $order->order_date;
            // you can fetch your event date stored as order meta
            $arr = array("product_id"=>$product_id,"order_date"=>$order_date,"bought"=>$bought);
            return $arr;
        }
      }
    }
 $arr = array("product_id"=>"","order_date"=>$order_date,"bought"=>$bought);
 return $order_date;
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...