bestsource

WooCommerce에서 선택한 배송 방법 제목 선택

bestsource 2023. 2. 17. 21:31
반응형

WooCommerce에서 선택한 배송 방법 제목 선택

Woo Commerceincludes\class-express-checkout-gateway.php파일 다음 코드로 배송 방법 ID를 받습니다.

$chosen_shipping_methods = WC()->session->get('chosen_shipping_methods');

이 되다flat_rate:1하지만 제목이 필요해Flat Rate.

나는 이미 이 모든 대답과 더 많은 것들을 시도해 보았다.

이거 어떻게 구하지?

$rate_table = array();

$shipping_methods = WC()->shipping->get_shipping_methods();

foreach($shipping_methods as $shipping_method){
    $shipping_method->init();

    foreach($shipping_method->rates as $key=>$val)
        $rate_table[$key] = $val->label;
}

echo $rate_table[WC()->session->get( 'chosen_shipping_methods' )[0]]; 

이렇게 해봐

고객이 프런트 엔드의 배송비를 계산하고 있는 경우는, 다음과 같이 됩니다.

function get_shipping_name_by_id( $shipping_id ) {
    $packages = WC()->shipping->get_packages();

    foreach ( $packages as $i => $package ) {
        if ( isset( $package['rates'] ) && isset( $package['rates'][ $shipping_id ] ) ) {
            $rate = $package['rates'][ $shipping_id ];
            /* @var $rate WC_Shipping_Rate */
            return $rate->get_label();
        }
    }

    return '';
}

지정된 배송 ID의 이름을 찾을 수 없는 경우 빈 문자열이 반환됩니다.

예를 들어 2개의 다른 local_pickup과 같이 동일한 배송 방법을 두 번 사용하면 이전 방법은 작동하지 않습니다.

(우리는 '진짜' 로컬 픽업용으로 local_backs를 사용하고, 다른 하나는 카운터에서 음식을 픽업하는 고객이 구내에서 먹을 수 있도록 사용해야 했습니다.)

local_pickup의 각 인스턴스에 대한 정보를 가져오려면 다음 방법으로 db의 옵션테이블에서 직접 읽을 수 있습니다.

/**
 * Assuming you have the $shipping_method_id in the form of 'local_pickup:2' for example.
 * @param $shipping_method_id
 * @return false
 */
function get_shipping_method_settings_from_method_id( $shipping_method_id = '' ){
    if( ! empty( $shipping_method_id ) ){
        // create the options key
        $method_key_id = str_replace( ':', '_', $shipping_method_id );
        // Get the complete option slug
        $option_name = 'woocommerce_'.$method_key_id.'_settings';
        // retrieve the entry from the options and return the array
        return get_option( $option_name, true );
    } else {
        return false;
    }
}

( wp-qa 게시물에서 제외)

위 중 어느 것도 나에게는 통하지 않는다.그래서 Woocommerce core를 살펴봤는데, 코드는 다음과 같습니다.

$chosen_shipping_methods = WC()->session->get("chosen_shipping_methods");
function get_shipping_name_by_id( $chosen_shipping_methods ) {
        if(preg_match("/\d+/", $chosen_shipping_methods, $instance_id)){
            $shipping_method = WC_Shipping_Zones::get_shipping_method( $instance_id[0] );
            return $shipping_method->get_title();
        }
        return null;
    }

$shipping_method_name = get_shipping_name_by_id(chosen_shipping_methods);
$current_shipping_method = WC()->session->get( 'chosen_shipping_methods' );
$packages = WC()->shipping()->get_packages();
$package = $packages[0];
$available_methods = $package['rates'];
foreach ($available_methods as $key => $method) {
    if($current_shipping_method[0] == $method->id){
        echo $method->label;
    }
}

언급URL : https://stackoverflow.com/questions/44427219/get-chosen-shipping-method-title-by-its-id-in-woocommerce

반응형