【问题标题】:WooCommerce products: Allow backorders only for specific user rolesWooCommerce 产品:仅允许特定用户角色的延期交货
【发布时间】:2021-04-30 15:31:23
【问题描述】:

我想允许特定客户角色的延期交货。 我写的代码是:

// BackOrder Allow Part #1
add_filter( 'woocommerce_product_backorders_allowed', 'woocommerce_product_backorders_allowed', 10, 3 );
function woocommerce_product_backorders_allowed( $backorder_allowed, $product_id, $product ){
    if ( current_user_can('administrator') ) {
        $backorder_allowed = true;
    } else {
        $backorder_allowed = false;
    }

    return $backorder_allowed;
}

// BackOrder Allow Part #2
add_filter( 'woocommerce_product_get_stock_status', 'woocommerce_product_get_stock_status', 10, 2 );
function woocommerce_product_get_stock_status( $stock_status, $product ) {
    if ( current_user_can('administrator') ) {
            return 'onbackorder';
    }
    else {
        return 'outofstock';
    }
    
}

似乎这个给出的结果只适用于简单的产品。 我如何为其他产品类型工作。 我需要为简单、可变和 yith-bundle 工作。 任何帮助将不胜感激! 谢谢!

【问题讨论】:

    标签: php wordpress woocommerce product product-variations


    【解决方案1】:

    您的代码中有一些错误和遗漏的东西。请改用以下内容:

    // Custom conditional function targeting specific user roles
    function is_allowed_user_role() {
        $targeted_roles = array('administrator', 'shop_manager'); // Here define your targeted user roles
        return (bool) array_intersect( wp_get_current_user()->roles, $targeted_roles );
    }
    
    add_filter( 'woocommerce_product_get_stock_status', 'filter_product_stock_status' );
    add_filter( 'woocommerce_product_variation_get_stock_status', 'filter_product_stock_status' );
    function filter_product_stock_status( $stock_status ) {
        if ( ! is_allowed_user_role() && 'onbackorder' === $stock_status ) {
            $stock_status = 'outofstock';
        }
        return $stock_status;
    }
    
    add_filter( 'woocommerce_product_get_backorders', 'filter_product_get_backorders' );
    add_filter( 'woocommerce_product_variation_get_backorders', 'filter_product_get_backorders' );
    function filter_product_get_backorders( $backorders ){
        return is_allowed_user_role() ? $backorders : 'no';
    }
    
    add_filter( 'woocommerce_product_backorders_allowed', 'filter_product_backorders_allowed', 10, 3 );
    function filter_product_backorders_allowed( $allowed, $product_id, $product ){
        return is_allowed_user_role() ? $allowed : false;
    }
    

    代码进入活动子主题(或活动主题)的functions.php 文件中。经过测试并且可以工作。

    【讨论】:

    • 谢谢,但没有给出结果
    • 没有给出简单和可变的结果,也许我们错过了什么?
    • @ВладимирКятипов 对我来说,它适用于所有情况(适用于可变产品,也适用于产品变体)。在上一个 woocommerce 版本下测试。
    • 你用的是什么主题?我在几个不同主题的网站上进行了测试,比如 astra、店面、最后一个 Woo 版本,但没有用,先生
    • 我稍微修改了一下,函数给了我结果!
    【解决方案2】:

    我确实改变了第二个功能。如果缺货,比如 qty = 0 或者 stockstatus 缺货,允许缺货

    // Custom conditional fuction to target specific user roles
    function is_allowed_user_role() {
        $targeted_roles = array('administrator', 'shop_manager'); // Here define your targeted user roles
        return (bool) array_intersect( wp_get_current_user()->roles, $targeted_roles );
    }
    
    add_filter( 'woocommerce_product_get_stock_status', 'filter_product_stock_status' );
    add_filter( 'woocommerce_product_variation_get_stock_status', 'filter_product_stock_status' );
    function filter_product_stock_status( $stock_status ) {
        if ( is_allowed_user_role()  && 'outofstock' === $stock_status ) {
            $stock_status = 'onbackorder';
        }
        return $stock_status;
    }
    
    add_filter( 'woocommerce_product_get_backorders', 'filter_product_get_backorders' );
    add_filter( 'woocommerce_product_variation_get_backorders', 'filter_product_get_backorders' );
    function filter_product_get_backorders( $backorders ){
        return is_allowed_user_role() ? $backorders : 'no';
    }
    
    add_filter( 'woocommerce_product_backorders_allowed', 'filter_product_backorders_allowed', 10, 3 );
    function filter_product_backorders_allowed( $allowed, $product_id, $product ){
        return is_allowed_user_role() ? $allowed : false;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-05
      • 1970-01-01
      • 2017-11-25
      • 2021-07-16
      • 2019-08-12
      • 2020-12-02
      • 2019-04-11
      • 2021-10-18
      相关资源
      最近更新 更多