Назначьте адрес доставки поставщика Dokan для адреса магазина в Woocommerce

Я использую подключаемые модули Dokan и Woocommerce для своего сайта WordPress.

Я хочу, чтобы все поставщики отправляли свои товары по адресу магазина, а не по адресу покупателя. После этого я хочу отправить товары из магазина по их адресу.

Но продавцам всегда показывается адрес доставки, это адрес покупателя, а не мой адрес. Я отключил доставку от поставщиков в Докане, но адрес доставки по-прежнему является адресом покупателя, а не моим.

Как я могу изменить адрес доставки, указанный продавцам, на адрес моего магазина? Я проверил настройки Woocommerce и не нашел решения. Следует ли мне изменить некоторые коды или установить дополнительные плагины?

Большое спасибо


person MJB    schedule 04.12.2018    source источник


Ответы (1)


Роль пользователя для поставщиков 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 вашей активной дочерней темы (или активной темы). Проверено и работает.

person LoicTheAztec    schedule 04.12.2018
comment
Спасибо за решение. Я попытался скопировать этот код и вставить plugins / dokan-pro / includes / functions.php. После этого адрес доставки и адрес выставления счета, показанные продавцу, являются адресом, введенным покупателем, а не адресом магазина. Должен ли я сделать что-нибудь еще? - person MJB; 05.12.2018
comment
@MJB ПРЕДУПРЕЖДЕНИЕ: Код помещается в файл function.php вашей темы. Он не входит ни в один из существующих плагинов ... Переопределение существующих файлов ядра Wordpress или файлов ядра плагинов запрещено. - person LoicTheAztec; 05.12.2018
comment
Уважаемый @LoicTheAztec, я добавил коды в файл темы function.php, но больше не работал. - person MJB; 05.12.2018