首页 文章

在Woocommerce结帐中添加SKU并订购已收到的网址

提问于
浏览
1

在woocommerce,我们允许在我们的商店当时只购买一种产品 . 我们的产品很少,没有商店页面(或档案页面) . 数量字段已禁用,客户将被重定向到结帐时添加到购物车 .

我们需要自定义一些URL以检测已添加到购物车的内容(已购买的内容) . 所以我需要传播产品SKU Checkout和订购收到的URL .

例如,我可以使用以下代码在THANK YOU URL中添加SKU:

add_filter('woocommerce_get_checkout_order_received_url','override_return_url',10,2);
function override_return_url($return_url,$order){

    // create empty array to store url parameters in 
    $sku_list = array();

    // retrieve products in order
    foreach($order->get_items() as $key => $item)
    {
        $product = wc_get_product($item['product_id']);

        // get sku of each product and insert it in array 
        $sku_list['product_'.$item['product_id'] .'sku'] = $product->get_sku();
    }
    // build query strings out of the SKU array
    $url_extension = http_build_query($sku_list);

    // append our strings to original url
    $modified_url = $return_url.'&'.$url_extension;

    return $modified_url;

  }

但我也需要结帐网址中的SKU .

有关信息,我在产品页面上有多种添加到购物车按钮:

  • woocommerce默认的一个 .

  • 使用Shortcode的产品内容中的其他一些内容,如 [add_to_cart id="99"]

  • 最后一个使用Sticky add to cart for WooCommerce插件 .

可能吗?我应该怎么做?

1 回答

  • 1

    Your code is a bit outdated 自Woocommerce 3 ...而不是你应该使用以下代码 .

    您必须通过设置或代码禁用任何添加到购物车重定向 . 您必须删除所有相关代码以避免错误或故障 .

    代码:

    // Redirect to checkout on add to cart and append the sku to the url
    add_action( 'woocommerce_add_to_cart_form_action', 'add_to_cart_sku_to_url', 20, 1 );
    function add_to_cart_sku_to_url( $product_permalink ) {
        global $product;
    
        if( $product->get_sku() ) {
            return add_query_arg( 'sku', $product->get_sku(), wc_get_checkout_url() );
        }
        return $product_permalink;
    }
    
    // Order received: Append the product sku to the URL
    add_filter( 'woocommerce_get_checkout_order_received_url', 'add_product_sku_to_return_url', 20, 2 );
    function add_product_sku_to_return_url( $return_url, $order  ) {
        $items   = $order->get_items();
        $item    = reset($items);
        $product = $item->get_product();
        $sku      = $product->get_sku();
    
        if( ! empty($sku) )
            $return_url = add_query_arg( 'sku', $sku, $return_url );
    
        return $return_url;
    }
    
    // Add to cart shortcode ( Product ID is not needed )
    if( ! function_exists('get_custom_add_to_cart') ) {
        function get_custom_add_to_cart( ) {
            if ( ! is_product() ) return;
    
            ob_start();
    
            global $product, $post;
    
            if ( ! is_a( $product, 'WC_Order' ) )
                $product = wc_get_product( get_the_id() );
    
            do_action( 'woocommerce_' . $product->get_type() . '_add_to_cart' );
    
            return ob_get_clean();
    
        }
        add_shortcode( 'custom_add_to_cart', 'get_custom_add_to_cart' );
    }
    

    代码位于活动子主题(或活动主题)的function.php文件中 . 经过测试和工作


    专门针对您的插件,您还应该添加以下代码:

    // Redirect GET add to cart to checkout apending sku as query arg
    add_action('template_redirect', 'get_add_to_cart_sku_to_checkout');
    function get_add_to_cart_sku_to_checkout() {
        // Not on checkout page
        if( ( is_product() || is_404() ) && isset($_GET['add-to-cart']) ){
            $product_id = (int) $_GET['add-to-cart']; // Checkout Url
            if( $product_id > 0 ){
                $sku = get_post_meta( $product_id, '_sku', true );
                wp_redirect( add_query_arg( 'sku', $sku, wc_get_checkout_url() ) );
                exit();
            }
        }
    }
    

    代码位于活动子主题(或活动主题)的function.php文件中 . 经过测试和工作

相关问题