我正试图禁止在产品编辑器中将某些勾选了“订购通知”复选框(请参见下面的代码)的产品添加到购物车。
add_action( 'woocommerce_product_options_general_product_data', 'custom_general_product_data_custom_fields' );
/**
* Add `Call to Order` field in the Product data's General tab.
*/
function custom_general_product_data_custom_fields() {
// Checkbox.
woocommerce_wp_checkbox(
array(
'id' => '_not_ready_to_sell',
'wrapper_class' => 'show_if_simple',
'label' => __( 'Call to Order', 'woocommerce' ),
'description' => __( '', 'woocommerce' )
)
);
}
add_action( 'woocommerce_process_product_meta', 'custom_save_general_proddata_custom_fields' );
/**
* Save the data values from the custom fields.
* @param int $post_id ID of the current product.
*/
function custom_save_general_proddata_custom_fields( $post_id ) {
// Checkbox.
$woocommerce_checkbox = isset( $_POST['_not_ready_to_sell'] ) ? 'yes' : 'no';
update_post_meta( $post_id, '_not_ready_to_sell', $woocommerce_checkbox );
}
add_filter( 'woocommerce_is_purchasable', 'custom_woocommerce_set_purchasable', 10, 2);
/**
* Mark "Not ready to sell" products as not purchasable.
*/
function custom_woocommerce_set_purchasable() {
$not_ready_to_sell = get_post_meta( get_the_ID(), '_not_ready_to_sell' , true);
return ( 'yes' == $not_ready_to_sell ? false : true );
}
add_filter( 'woocommerce_product_add_to_cart_text', 'custom_product_add_to_cart_text' );
/**
* Change "Read More" button text for non-purchasable products.
*/
function custom_product_add_to_cart_text() {
$not_ready_to_sell = get_post_meta( get_the_ID(), '_not_ready_to_sell', true );
if ( 'yes' === $not_ready_to_sell ) {
return __( 'Call to Order', 'woocommerce' );
} else {
return __( 'Add to Cart', 'woocommerce' );
}
}
带有复选框打勾的产品实际上是不可购买的,这是期望的结果。
我遇到的问题是,当我单击产品目录页面上的可购买产品(未选中复选框的“添加到购物车”)时,我被重定向到产品页面和默认的WooCommerce消息“对不起,此产品无法购买。”出现。应该发生的是,当单击“添加到购物车”按钮时,产品会自动添加到购物车。
也可以从单个产品页面上添加购物车,而不会出现问题。
我不确定为什么会这样发生。有任何想法吗?
答案 0 :(得分:1)
我已经对您的代码进行了测试,并且可以正常工作...我没有您描述的有问题的行为...所以还有其他麻烦:
您将需要首先进行数据库备份……然后您应该尝试:
问题也可能来自主题。
从Woocommerce 3 and introduced CRUD Objects开始,您的代码有些过时了。
以下是重新访问并增强的代码版本(适用于Woocommerce 3 +):
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
//converter to process any kind of response,
converter.setSupportedMediaTypes(Arrays.asList({MediaType.ALL}));
messageConverters.add(converter);
restTemplate.setMessageConverters(messageConverters);
代码在您的活动子主题(或活动主题)的function.php文件上。可以。