Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在Woocommerce签出和订单接收URL中添加SKU_Php_Wordpress_Woocommerce_Query String_Checkout - Fatal编程技术网

Php 在Woocommerce签出和订单接收URL中添加SKU

Php 在Woocommerce签出和订单接收URL中添加SKU,php,wordpress,woocommerce,query-string,checkout,Php,Wordpress,Woocommerce,Query String,Checkout,在woocommerce中,我们允许在我们的商店一次只购买一种产品。我们的产品很少,也没有商店页面(或档案页面)。数量字段被禁用,客户在添加到购物车时被重定向到结帐 我们需要定制一些URL,以检测已添加到购物车的内容(已购买的内容)。因此,我需要传播产品SKU签出和订单接收URL 例如,我可以使用以下代码在感谢URL中添加SKU: add_filter('woocommerce_get_checkout_order_received_url','override_return_url',10,2

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

我们需要定制一些URL,以检测已添加到购物车的内容(已购买的内容)。因此,我需要传播产品SKU签出和订单接收URL

例如,我可以使用以下代码在感谢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;

  }
// 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();
        }
    }
}
但我也需要结帐URL中的SKU

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

  • 默认值为1
  • 产品内容中的一些其他内容使用短代码,如
    [add_to_cart id=“99”]
  • 最后一个使用插件

可能吗?我该怎么办?

您的代码有点过时了,因为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文件。测试和工作


特别是对于您的插件,您还应添加以下代码:

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;

  }
// 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文件。测试和工作

Noone?我的问题清楚吗?如果你需要更多的信息,请告诉我。谢谢非常感谢@loic,“感谢代码”很好用。但是,您的意思是,由于AJAX调用,无法在添加到购物车/结帐URL中显示SKU?广告平台需要唯一的URL来了解用户访问了哪些页面(例如,我需要粘贴URL包含:[唯一参数]),这是绝对没有办法的?Hello@loic,我实际上只要求一件事。购买产品时,通过URL传播SKU。你认为这是一个更简单的方式来阐述这个问题吗?