Удалить кнопку «Добавить в корзину» для заказанного товара - PullRequest
2 голосов
/ 04 июля 2019

Я пытаюсь удалить кнопку add to cart из заказанных товаров, товаров, которые пользователь разместил заказ.Например, когда пользователь оформляет заказ на 1 или несколько товаров, когда он размещает свой заказ, а затем удаляет кнопку add to cart только с этих заказанных товаров, кнопка должна удалять временные, а не постоянные.Поскольку на странице оформления заказа я добавил новое поле с именем Date Of Event.

. Оно должно работать следующим образом: если пользователь выберет дату 7/4/2019 or 9/4/2019 во время оформления заказа на странице оформления заказа и разместит свой заказ, то кнопка add to cartудалит из заказанных товаров только для того дня, который пользователь выбрал во время оформления заказа в Date Of Event Field.

Я пытаюсь удалить кнопку «Добавить в корзину» из заказанных товаров, но посмотрите, что я пробовал, Это удаляет добавлениекнопку в корзину из всех продуктов, даже если эти продукты не заказаны.

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

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

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 hidecart() {
    $found = has_bought_items();
    if (!empty($found)) {
        $event_date = $_POST['date_of_event'];
        if ($found === $event_date) {
            return false;
        }
    }
}

add_filter('woocommerce_is_purchasable', 'hidecart', 10, 1);

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

    $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;
                $event_date = $_POST['date_of_event'];
                // you can fetch your event date stored as order meta
                return $event_date;
            }
        }
    }
    return $event_date;
}

Может кто-нибудь помочь?

Я застрял.

...