问题描述
我在使用亚马逊外部产品的网站上工作,但希望将用户指向该外部 URL,首先将该产品添加到购物车.我有这个功能,将每个产品的默认按钮文本更改为添加到购物车.
function sv_wc_external_product_button( $button_text, $product ) {if ('外部' === $product->get_type() ) {//输入外部产品的默认文本返回 $product->button_text ?$product->button_text : '加入购物车';}返回 $button_text;}add_filter('woocommerce_product_single_add_to_cart_text','sv_wc_external_product_button', 10, 2 );
但此功能不会将产品添加到购物车.
如何使用此功能将所选产品添加到购物车?
谢谢.
2020 年更新
这是一种完全不同的方式,使用简单的产品和自定义字段外部链接.
在这个答案中,我们将使用简单的产品而不是外部产品.
- 我们添加了一个外部 URL";产品选项设置中的自定义字段,我们保存数据.
在常规产品选项设置中添加自定义字段仅适用于简单产品:
add_action('woocommerce_product_options_general_product_data', 'simple_product_with_external_url');函数 simple_product_with_external_url() {全球 $product_object;echo '<div class="options_group show_if_simple hidden">';//外部网址woocommerce_wp_text_input(数组('id' =>'_ext_url_cust','标签' =>'外部网址','说明' =>'自定义外部 URL','desc_tip' =>'真的','占位符' =>'在此处输入您的自定义外部 URL') );回声'</div>';}
如果它是一个简单的产品并且不为空,则保存自定义字段数据:
add_action('woocommerce_admin_process_product_object', 'save_simple_product_with_external_url');函数 save_simple_product_with_external_url( $product ) {if( $product->is_type('simple') && isset($_POST['_ext_url_cust']) ) {$product->update_meta_data('_ext_url_cust', sanitize_url($_POST['_ext_url_cust']));}}
2) 如果我们没有在 WooCommerce 中设置将产品添加到购物车时的购物车重定向,这将不适用于商店页面和档案页面.
因此,我们将在商店页面和存档页面上替换添加到购物车"按钮(仅针对我们带有自定义链接重定向的简单产品),将自定义按钮链接到单个产品页面.>
替换商店页面和档案页面中的添加到购物车按钮(对于具有自定义外部 url 的简单产品):
add_filter( 'woocommerce_loop_add_to_cart_link', 'quantity_inputs_for_woocommerce_loop_add_to_cart_link', 10, 2 );函数quantity_inputs_for_woocommerce_loop_add_to_cart_link( $html, $product ) {$external_url = $product->get_meta('_ext_url_cust');如果(!空($external_url)){$html = sprintf('<a href="%s" class="button alt add_to_cart_button">%s</a>', $product->get_permalink(), __("阅读更多",woocommerce"));}返回 $html;}
3) 如果自定义字段值不为空,则先将产品添加到购物车,然后重定向到外部 URL (我们在单个产品页面中的自定义字段值)强>
添加到购物车后的外部 URL 重定向(当简单产品中的自定义字段不为空时):
add_filter('woocommerce_add_to_cart_redirect', 'redirect_simple_product_with_external_url');函数redirect_simple_product_with_external_url( $url ) {if( isset($_REQUEST['add-to-cart']) && absint( $_REQUEST['add-to-cart'] ) > 0 )返回 get_post_meta( absint( $_REQUEST['add-to-cart'] ), '_ext_url_cust', true );返回 $url;}
代码位于活动子主题(或主题)的 function.php 文件或任何插件文件中.
此代码经过测试,可在 WooCommerce 版本 3+ 上运行
I work on site that use External products from Amazon, but want instead pointing users to that external URL, first to add to cart that product. I have this function, that change Default Button text for each product, to Add to cart.
function sv_wc_external_product_button( $button_text, $product ) {
if ( 'external' === $product->get_type() ) {
// enter the default text for external products
return $product->button_text ? $product->button_text : 'Add To Cart';
}
return $button_text;
}
add_filter( 'woocommerce_product_single_add_to_cart_text',
'sv_wc_external_product_button', 10, 2 );
But this function not add product to cart.
How to make this function to Add selected product to cart?
Thanks.
Updated 2020
Add a custom field on general product option settings for simple products only :
add_action( 'woocommerce_product_options_general_product_data', 'simple_product_with_external_url' );
function simple_product_with_external_url() {
global $product_object;
echo '<div class="options_group show_if_simple hidden">';
// External Url
woocommerce_wp_text_input( array(
'id' => '_ext_url_cust',
'label' => 'External Url',
'description' => 'Custom external URL',
'desc_tip' => 'true',
'placeholder' => 'Enter here your custom external URL'
) );
echo '</div>';
}
Save the custom field data if it's a simple product and not empty:
add_action( 'woocommerce_admin_process_product_object', 'save_simple_product_with_external_url' );
function save_simple_product_with_external_url( $product ) {
if( $product->is_type('simple') && isset($_POST['_ext_url_cust']) ) {
$product->update_meta_data( '_ext_url_cust', sanitize_url($_POST['_ext_url_cust']) );
}
}
Replacing add-to-cart button in shop pages and archives pages (for simple products with custom external url):
add_filter( 'woocommerce_loop_add_to_cart_link', 'quantity_inputs_for_woocommerce_loop_add_to_cart_link', 10, 2 );
function quantity_inputs_for_woocommerce_loop_add_to_cart_link( $html, $product ) {
$external_url = $product->get_meta('_ext_url_cust');
if ( ! empty($external_url) ) {
$html = sprintf( '<a href="%s" class="button alt add_to_cart_button">%s</a>', $product->get_permalink(), __("Read More", "woocommerce") );
}
return $html;
}
External URL redirection after adding to cart (when custom field is not empty in simple products):
add_filter( 'woocommerce_add_to_cart_redirect', 'redirect_simple_product_with_external_url' );
function redirect_simple_product_with_external_url( $url ) {
if( isset($_REQUEST['add-to-cart']) && absint( $_REQUEST['add-to-cart'] ) > 0 )
return get_post_meta( absint( $_REQUEST['add-to-cart'] ), '_ext_url_cust', true );
return $url;
}
Code goes in function.php file of your active child theme (or theme) or also in any plugin file.
This code is tested and works on WooCommerce version 3+
这篇关于将外部产品 URL 覆盖为“添加到购物车";产品按钮的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!