1

我正在为我的 wordpress 网站使用DokanWoocommerce插件。

我希望所有供应商将他们的产品运送到商店地址而不是客户地址。之后,我想将产品从商店运送到他们的地址。

但总是向供应商显示送货地址,是客户地址而不是我的地址。我在 Dokan 禁用了供应商送货,但送货地址仍然是客户地址,而不是我的。

如何将向供应商显示的送货地址更改为我的商店地址?我检查了 Woocommerce 设置并没有找到任何解决方案。我应该更改一些代码还是安装更多插件?

非常感谢

4

1 回答 1

2

Dokan 供应商的用户角色是“供应商”,因此您可以定位此用户角色并:

  • 在购物车和结帐页面中,将送货地址设置为商店基地
  • 在订单提交保存为送货地址商店基地

编码:

// Utility function that outputs the shop base address in an array
function get_shop_base_address() {
    $country_state = explode( ':', get_option( 'woocommerce_default_country' ) );

    return array(
        'address1'  => get_option( 'woocommerce_store_address' ),
        'address2' => get_option( 'woocommerce_store_address_2' ),
        'city'     => get_option( 'woocommerce_store_city' ),
        'postcode' => get_option( 'woocommerce_store_postcode' ),
        'state'    => $country_state[0],
        'country'  => isset($country_state[1]) ? $country_state[1] : '',
    );
}


// Set vendor shipping address to the shop base in Cart and checkout
add_action( 'template_redirect', 'set_vendor_shipping_address', 10 );
function set_vendor_shipping_address() {
    if( ( is_cart() || ( is_checkout() && ! is_wc_endpoint_url() ) ) &&
    if( current_user_can( 'vendor' ) ) {

        // Get shop base country/state
        $address = get_shop_base_address();

        // Set customer shipping
        WC()->customer->set_shipping_address_1( $address['address1'] );
        WC()->customer->set_shipping_address_2( $address['address2'] );
        WC()->customer->set_shipping_city( $address['city'] );
        WC()->customer->set_shipping_postcode( $address['postcode'] );
        WC()->customer->set_shipping_state( $address['state'] );
        WC()->customer->set_shipping_country( $address['country'] );
    }
}


// Save vendor order shipping address to the shop base
add_action( 'woocommerce_checkout_create_order', 'save_vendor_shipping_address', 10, 2 );
function save_vendor_shipping_address( $order, $data ) {
    if( current_user_can( 'vendor' ) ) {

        // Get shop base country/state
        $address = get_shop_base_address();

        // Set customer shipping
        $order->set_shipping_address_1( $address['address1'] );
        $order->set_shipping_address_2( $address['address2'] );
        $order->set_shipping_city( $address['city'] );
        $order->set_shipping_postcode( $address['postcode'] );
        $order->set_shipping_state( $address['state'] );
        $order->set_shipping_country( $address['country'] );
    }
}

代码位于您的活动子主题(或活动主题)的 function.php 文件中。测试和工作。

于 2018-12-04T05:53:37.960 回答