在 WooCommerce 上全局禁止延期交货产品选项(也在管理员中)
Disallow backorders product option globally (in admin too) on WooCommerce
我有一个关于如何在全球范围内禁用 WooCommerce 延期交货的问题。我在这里找到了这个:
我现在用add_filter( 'woocommerce_product_backorders_allowed', '__return_false' );
。但是仍然可以将该选项设置为允许。所以我的问题是,如果我将产品设置为“允许延期交货”并且此片段处于活动状态。保存产品后,“允许延期交货”是可见的。但是,即使选择了“允许”,也只能是展示物和后面的Backorder不可以吗?
如果没有办法改变那个设置就好了。也许在编辑产品概述中将那个选项灰掉?
有可能吗?
干杯
您可以使用以下方法禁用管理产品单页上的延期交货设置(也处理产品变体):
add_action( 'admin_footer', 'disable_backorder_option_from_product_settings' );
function disable_backorder_option_from_product_settings() {
global $pagenow, $post_type;
if( in_array( $pagenow, array('post-new.php', 'post.php') ) && $post_type === 'product' ) :
?>
<script>
jQuery(function($){
// For product variations
$('#variable_product_options').on('change', function(){
$('select[name^=variable_backorders]').each( function(){
$(this).prop('disabled','disabled').val('no');
});
});
// For all other product types
$('select#_backorders').prop('disabled','disabled').val('no');
});
</script>
<?php
endif;
}
对于前端,您将额外使用(如果仍有一些旧产品启用了延期交货选项):
add_filter( 'woocommerce_product_backorders_allowed', '__return_false', 1000 );
add_filter( 'woocommerce_product_backorders_require_notification', '__return_false', 1000 );
add_filter( 'woocommerce_product_get_backorders', 'get_backorders_return_no' );
add_filter( 'woocommerce_product_variation_get_backorders', 'get_backorders_return_no' );
function get_backorders_return_no( $backorders ){
return 'no';
}
add_filter( 'woocommerce_product_get_stock_status', 'filter_product_stock_status', 10, 2 );
add_filter( 'woocommerce_product_variation_get_stock_status', 'filter_product_stock_status', 10, 2 );
function filter_product_stock_status( $stock_status, $product ){
return $product->get_manage_stock() && $product->get_stock_quantity() <= 0 ? 'outofstock' : $stock_status;
}
代码进入活动子主题(或活动主题)的 functions.php 文件。已测试并有效。
我有一个关于如何在全球范围内禁用 WooCommerce 延期交货的问题。我在这里找到了这个:
我现在用add_filter( 'woocommerce_product_backorders_allowed', '__return_false' );
。但是仍然可以将该选项设置为允许。所以我的问题是,如果我将产品设置为“允许延期交货”并且此片段处于活动状态。保存产品后,“允许延期交货”是可见的。但是,即使选择了“允许”,也只能是展示物和后面的Backorder不可以吗?
如果没有办法改变那个设置就好了。也许在编辑产品概述中将那个选项灰掉?
有可能吗?
干杯
您可以使用以下方法禁用管理产品单页上的延期交货设置(也处理产品变体):
add_action( 'admin_footer', 'disable_backorder_option_from_product_settings' );
function disable_backorder_option_from_product_settings() {
global $pagenow, $post_type;
if( in_array( $pagenow, array('post-new.php', 'post.php') ) && $post_type === 'product' ) :
?>
<script>
jQuery(function($){
// For product variations
$('#variable_product_options').on('change', function(){
$('select[name^=variable_backorders]').each( function(){
$(this).prop('disabled','disabled').val('no');
});
});
// For all other product types
$('select#_backorders').prop('disabled','disabled').val('no');
});
</script>
<?php
endif;
}
对于前端,您将额外使用(如果仍有一些旧产品启用了延期交货选项):
add_filter( 'woocommerce_product_backorders_allowed', '__return_false', 1000 );
add_filter( 'woocommerce_product_backorders_require_notification', '__return_false', 1000 );
add_filter( 'woocommerce_product_get_backorders', 'get_backorders_return_no' );
add_filter( 'woocommerce_product_variation_get_backorders', 'get_backorders_return_no' );
function get_backorders_return_no( $backorders ){
return 'no';
}
add_filter( 'woocommerce_product_get_stock_status', 'filter_product_stock_status', 10, 2 );
add_filter( 'woocommerce_product_variation_get_stock_status', 'filter_product_stock_status', 10, 2 );
function filter_product_stock_status( $stock_status, $product ){
return $product->get_manage_stock() && $product->get_stock_quantity() <= 0 ? 'outofstock' : $stock_status;
}
代码进入活动子主题(或活动主题)的 functions.php 文件。已测试并有效。