woocommerce - 仅在一种简单产品上添加到购物车按钮
问题描述
我只想在一个简单的产品上显示添加到购物车按钮。
我有两种产品:-只有“请求报价”按钮的变体产品>我隐藏了添加到购物车-只有“添加到购物车”按钮的简单产品>我有隐藏的请求报价按钮
但是新产品需要两个按钮。
这部分代码隐藏报价按钮并起作用:
if( !function_exists( 'ywraq_hide_quote_for_simple_products' ) ){
add_filter( 'yith_ywraq_before_print_button', 'ywraq_hide_quote_for_simple_products', 10, 2 );
/**
* @param bool $show
* @param WC_Product $product
* @return bool
**/
function ywraq_hide_quote_for_simple_products( $show, $product ){
if( $product->is_type( 'simple' ) ){
$show = false;
}
return $show;
}
}
在上面的代码上,我尝试添加下面的代码以显示两个按钮,但不起作用:
add_filter('woocommerce_is_purchasable', 'onlyonesimpleproduct_is_purchasable', 10, 2);
function onlyonesimpleproduct_is_purchasable( $is_purchasable, $object ) {
// Checks to see if the product id is 135,
// returns true if is, false otherwise.
return ( 135 === $object->id );
}
这部分隐藏添加到购物车和作品:
add_action( 'woocommerce_single_product_summary', 'hide_add_to_cart_button_variable_product', 1, 0 );
function hide_add_to_cart_button_variable_product() {
remove_action( 'woocommerce_single_variation', 'woocommerce_single_variation_add_to_cart_button', 20 );
}
你能帮我在第一部分中实现第二部分代码吗?谢谢你的支持。
解决方案
经过几次尝试,我找到了一个适合我的解决方案,记得我首先想显示两个按钮“添加到购物车”和“询问报价”,但我用上面的代码隐藏了一个或另一个。
所以我决定显示两个按钮并使用一个功能来隐藏一个,即简单产品上的“请求报价”按钮。我使用了这个线程的一部分代码Disabling Add to Cart Button for specific WooCommerce Products
最初的代码隐藏了添加到购物车按钮,但我将其转换为:
// Add a custom field in the Product data's General tab (for simple products).
add_action( 'woocommerce_product_options_general_product_data', 'add_general_product_data_custom_field' );
function add_general_product_data_custom_field() {
woocommerce_wp_checkbox( array( // Checkbox.
'id' => '_not_ready_to_quote',
'label' => __( 'No quote', 'woocommerce' ),
'wrapper_class' => 'show_if_simple',
) );
}
// Save custom field value
add_action( 'woocommerce_admin_process_product_object', 'save_general_product_data_custom_field', 10, 1 );
function save_general_product_data_custom_field( $product ) {
$product->update_meta_data( '_not_ready_to_quote', isset( $_POST['_not_ready_to_quote'] ) ? 'yes' : 'no' );
}
// Make not request quote products with '_not_ready_to_quote' meta data set to "yes" (for simple products)
add_filter( 'yith_ywraq_before_print_button', 'ywraq_hide_quote_for_simple_products', 10, 2);
function ywraq_hide_quote_for_simple_products( $show, $product ) {
return 'yes' === $product->get_meta( '_not_ready_to_quote' ) && $product->is_type('simple') ? false : $show;
}
// Change button text to "No quote" for simple products not request quote.
add_filter( 'woocommerce_product_request_quote_text', 'filter_product_request_quote_text', 10, 2 );
function filter_product_request_quote_text( $button_text, $product ) {
if ( 'yes' === $product->get_meta( '_not_ready_to_quote' ) && $product->is_type('simple') ) {
$button_text = __( 'No quote', 'woocommerce' );
}
return $button_text;
}
希望有一天它可以帮助某人!
推荐阅读
- reactjs - 尝试使用 npm runeject 创建 css 模块时出现此错误
- rest - 微服务是否可以结合 REST 和消息传递?
- jenkins - Jenkins Jobs 激活相同 Conda 环境的问题
- javascript - 在 Javascript 中通过任意 3 个选项(换行符、逗号、空格)拆分字符串
- java - java - 如何在java的while循环中将数字放入数组?
- c# - 从另一个应用程序将参数传递给部署在文件存储(而不是 Web)上的 wpf clickonce 应用程序
- matlab - 如何在 Simulink 中求解 ODE 方程?
- html - 如何让我的网站在 1920 x 1080 和 3840 x 2160 上看起来完全一样
- laravel - 在 Laravel 中创建第二个用户模型
- python - ZipInfo 中的 external_attr 和 internal_attr 指的是什么?