【问题标题】:Disallow backorders product option globally (in admin too) on WooCommerce在 WooCommerce 上全局禁止延期交货产品选项(也在管理员中)
【发布时间】:2021-03-31 09:20:29
【问题描述】:

我有一个关于如何在全球范围内禁用 WooCommerce 中的缺货订单的问题。我在这里找到了这个:

How to disable globally backorders in WooCommerce

https://wordpress.stackexchange.com/questions/334083/woocommerce-is-it-possible-to-overide-the-settings-for-allowing-to-purchase-out

我现在使用add_filter( 'woocommerce_product_backorders_allowed', '__return_false' );。但是仍然可以将该选项设置为允许。所以我的问题是,如果我将产品设置为“允许延期交货”并且此剪辑处于活动状态。保存产品“允许延期交货”后可见。但是即使选择了“允许”,也只有显示的东西和后备货是不可能的吗?

如果无法更改该设置,那就太好了。也许在编辑产品概述中将该选项显示为灰色?

有可能吗?

干杯

【问题讨论】:

  • 能不能通过优先级add_filter( 'woocommerce_product_backorders_allowed', '__return_false', 1000 )
  • 我知道,但这是完全一样的行为...... :(

标签: php jquery wordpress woocommerce backend


【解决方案1】:

您可以使用以下方法禁用管理产品单个页面上的延期交货设置(也可以处理产品变体)

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 文件中。经过测试并且可以工作。

【讨论】:

  • 太棒了!这是否也意味着,现在允许延期交货的所有产品也被禁用?或者我需要添加 add_filter( 'woocommerce_product_backorders_allowed', '__return_false' );为此?
  • @Nik7 不,它只会禁用管理产品设置中的延期交货选项。
  • 我明白了,那么我还需要 add_filter( 'woocommerce_product_backorders_allowed', '__return_false' );为了在每个产品上禁用它,对吗?
  • @Nik7 我更新了我的代码来处理前端产品页面,但在某些产品上仍然启用了延期交货选项。
  • @Nik7 更新代码...这个问题现在应该解决了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-16
  • 1970-01-01
  • 2019-03-17
  • 1970-01-01
  • 1970-01-01
  • 2019-03-05
  • 1970-01-01
相关资源
最近更新 更多