在 Woocommerce Checkout 和 Order received Urls 中添加 SKU
Add SKU in Woocommerce Checkout and Order received Urls
在 woocommerce 中,我们一次只允许在我们的商店购买一种产品。我们的产品很少,也没有商店页面(或档案页面)。数量字段被禁用,客户在添加到购物车时被重定向到结帐。
我们需要自定义一些 URL 来检测已添加到购物车的内容(已购买的内容)。所以我需要传播产品 SKU Checkout 和 Order received URLs.
例如,我可以使用以下代码在谢谢 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 URL。
有关信息,我在产品页面上有多种添加到购物车按钮:
- woocommerce 默认一个。
- 产品内容中的其他一些使用短代码,例如
[add_to_cart id="99"]
- 最后一个使用 Sticky add to cart for WooCommerce 插件。
可能吗?我该怎么办?
您的代码有点过时 自 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 文件。测试和工作
在 woocommerce 中,我们一次只允许在我们的商店购买一种产品。我们的产品很少,也没有商店页面(或档案页面)。数量字段被禁用,客户在添加到购物车时被重定向到结帐。
我们需要自定义一些 URL 来检测已添加到购物车的内容(已购买的内容)。所以我需要传播产品 SKU Checkout 和 Order received URLs.
例如,我可以使用以下代码在谢谢 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 URL。
有关信息,我在产品页面上有多种添加到购物车按钮:
- woocommerce 默认一个。
- 产品内容中的其他一些使用短代码,例如
[add_to_cart id="99"]
- 最后一个使用 Sticky add to cart for WooCommerce 插件。
可能吗?我该怎么办?
您的代码有点过时 自 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 文件。测试和工作