Woocommerce перенаправить в корзину с уже добавленными продуктами - PullRequest
0 голосов
/ 23 октября 2019

У меня есть особая проблема, которая включает в себя WordPress, Woocommerce и c #.

Приложение My C # позволяет пользователям получать доступ к продуктам из магазина Woocommerce. После выбора некоторых продуктов пользователь может отправить заказ на свою электронную почту, чтобы проверить, все ли в порядке. В нижней части письма я хочу добавить кнопку «Перейти в корзину».

Эта кнопка должна перенаправить пользователя на страницу корзины / оформления заказа с уже добавленными продуктами. Для этого мне нужно иметь конкретную ссылку. Я знаю, что есть способ добавить один товар, но в этом случае мне нужно направить пользователя в корзину, полную разных товаров и количеств. Мне интересно, есть ли способ сделать это в javascript (кнопка, которая выполняет несколько ссылок и открывает корзину, полную продуктов).

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

Я не знаю, какой код должен быть полезным, поэтому я нене публиковать. Если вы считаете, что вам нужен мой код, напишите комментарий, и я обновлю сообщение.

Я знаю, что есть код, который вы можете вставить в WordPress, который позволяет вам добавлять различные продукты по одной ссылкеоднако из-за специфики этого приложения (клиент не должен редактировать какие-либо файлы WordPress) я не могу этого сделать.

У вас есть идеи о том, как ее решить?

1 Ответ

0 голосов
/ 23 октября 2019

По умолчанию woocommerce вы можете добавить один продукт за раз через URL: ... корзина /? add-to-cart = 12

По умолчанию, не меняя ничего в WOcommerce, вы не сможете с помощью кнопки добавить все эти продукты сразу, вам нужно будет изменить код по умолчанию.

Простым решением было бы создать плагин WordPress, который добавляет эту функциональность принятия добавления нескольких продуктов через URL, и клиент просто добавляет этот плагин WordPress, и он будет работать.

Я советую вам создать локальныйсреда для тестирования перед производством.

Ссылка на документацию: https://developer.wordpress.org/plugins/plugin-basics/

Вот пример кода, вам нужно будет создать папку внутри папки плагинов и дать ей пример имени: my_plugin firstи внутри него файл my_plugin.php

Внутри этого файла вы добавляете следующий код:

<?php
/**
 * Plugin Name: YOUR PLUGIN NAME
*/

function woocommerce_maybe_add_multiple_products_to_cart() {
// Make sure WC is installed, and add-to-cart qauery arg exists, and contains at least one comma.
if ( ! class_exists( 'WC_Form_Handler' ) || empty( $_REQUEST['add-to-cart'] ) || false === strpos( $_REQUEST['add-to-cart'], ',' ) ) {
    return;
}

// Remove WooCommerce's hook, as it's useless (doesn't handle multiple products).
remove_action( 'wp_loaded', array( 'WC_Form_Handler', 'add_to_cart_action' ), 20 );

$product_ids = explode( ',', $_REQUEST['add-to-cart'] );
$count       = count( $product_ids );
$number      = 0;

foreach ( $product_ids as $product_id ) {
    if ( ++$number === $count ) {
        // Ok, final item, let's send it back to woocommerce's add_to_cart_action method for handling.
        $_REQUEST['add-to-cart'] = $product_id;

        return WC_Form_Handler::add_to_cart_action();
    }

    $product_id        = apply_filters( 'woocommerce_add_to_cart_product_id', absint( $product_id ) );
    $was_added_to_cart = false;
    $adding_to_cart    = wc_get_product( $product_id );

    if ( ! $adding_to_cart ) {
        continue;
    }

    $add_to_cart_handler = apply_filters( 'woocommerce_add_to_cart_handler', $adding_to_cart->product_type, $adding_to_cart );

    /*
     * Sorry.. if you want non-simple products, you're on your own.
     *
     * Related: WooCommerce has set the following methods as private:
     * WC_Form_Handler::add_to_cart_handler_variable(),
     * WC_Form_Handler::add_to_cart_handler_grouped(),
     * WC_Form_Handler::add_to_cart_handler_simple()
     *
     * Why you gotta be like that WooCommerce?
     */
    if ( 'simple' !== $add_to_cart_handler ) {
        continue;
    }

    // For now, quantity applies to all products.. This could be changed easily enough, but I didn't need this feature.
    $quantity          = empty( $_REQUEST['quantity'] ) ? 1 : wc_stock_amount( $_REQUEST['quantity'] );
    $passed_validation = apply_filters( 'woocommerce_add_to_cart_validation', true, $product_id, $quantity );

    if ( $passed_validation && false !== WC()->cart->add_to_cart( $product_id, $quantity ) ) {
        wc_add_to_cart_message( array( $product_id => $quantity ), true );
    }
}
}

 // Fire before the WC_Form_Handler::add_to_cart_action callback.
 add_action( 'wp_loaded',        'woocommerce_maybe_add_multiple_products_to_cart', 15 );

Одна важная вещь, этот код - всего лишь пример, и вы можете добавлять продукты изURL вот так: http://shop.com/shop/cart/?add-to-cart=3001,3282 просто передавая идентификаторы продуктов, которые вы хотите обновить.

Этот код изменяет woocommerce и, следовательно, всеБлагодаря различным продуктам по URL, не был разработан мной, я взял это в качестве примера по ссылке ниже: Добавление нескольких товаров в корзину WooCommerce одновременно

В этой ссылке вы увидите несколько предложений,То, что я сделал, это просто дал свет, который может помочь решить вашу проблему. Разработка плагина, который не изменит исходный код клиентского сайта, является наилучшим вариантом, и если что-то пойдет не так или не получится, просто отключите все обратно в нормальное состояние;) Надеюсь, я каким-то образом помог.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...