一点背景知识 - 我目前正在使用WooCommerce 插件的产品预订单 https://wordpress.org/plugins/product-pre-orders-for-woo/由别墅主题。总的来说,除了这一件事之外,它对于我的目的来说效果很好。
我想为具有以下产品类型的产品制作自定义“有库存”消息选中“预购”框 https://ibb.co/h1Dh43H.
目前我已经通过 php 实现了以下解决方案,但是它很麻烦,因为它需要手动输入/更新产品 ID。我还应该提到这些是可变产品。
function wcs_custom_get_availability( $availability, $_product ) {
$product_ids = array(3831, 3832);
// custom
if (in_array( $_product->get_id(), $product_ids ) ) {
$availability['availability'] = sprintf( __('Available for Pre-Order', 'woocommerce'), $_product->get_stock_quantity());
}
// Out of stock
if ( ! $_product->is_in_stock() ) {
$availability['availability'] = __('Out of Stock', 'woocommerce');
}
return $availability;
}
我更喜欢一种代码解决方案,能够自动识别产品何时被指定为预购商品,并相应地更新“有库存”文本。
非常感谢您对我的代码进行的任何更新以使其按所述方式运行。
提前致谢,
瑞安
你可以这样使用它:
/**
* Change availability text.
*
* @param array $availability Availability data array.
* @param WC_Product $_product WC Product object.
*
* @return array.
*/
function wcs_custom_get_availability( $availability, $_product ) {
$is_preorder = 'no';
if ( $_product->is_type( 'variation' ) ) {
$is_preorder = get_post_meta( $_product->get_id(), '_wpro_variable_is_preorder', true );
} elseif ( $_product->is_type( 'variable' ) ) {
$_variations = $_product->get_available_variations();
$_variations_ids = ! empty( $_variations ) ? wp_list_pluck( $_variations, 'variation_id' ) : array();
if ( ! empty( $_variations_ids ) ) {
$is_preorders = array_map(
function( $id ) {
return wc_string_to_bool( get_post_meta( $id, '_wpro_variable_is_preorder', true ) );
},
$_variations_ids
);
$is_preorder = in_array( true, $is_preorders, true ) ? 'yes' : 'no';
}
} else {
$is_preorder = get_post_meta( $_product->get_id(), '_simple_preorder', true );
}
if ( wc_string_to_bool( $is_preorder ) ) {
$availability['availability'] = __( 'Available for Pre-Order', 'woocommerce' );
}
return $availability;
}
add_action( 'woocommerce_get_availability', 'wcs_custom_get_availability', 20, 2 );
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)