programing

WooCommercommercommerce:체크아웃 페이지에서 기본적으로 국가 설정

megabox 2023. 6. 13. 22:10
반응형

WooCommercommercommerce:체크아웃 페이지에서 기본적으로 국가 설정

저는 워드프레스 웹사이트에서 WooCommerce를 사용하고 있습니다.고객 청구 및 배송 세부 정보는 체크아웃 페이지에 기본적으로 입력됩니다.국가가 기본적으로 설정되지 않기를 바랍니다.대신 사용자가 로그인한 경우에도 국가를 선택하라는 메시지가 표시됩니다.

스크린샷 링크

좋은 의견이라도 있나?이를 위해 제가 해야 할 일은 무엇입니까?

갱신하다 (우커머스 3 이후)

다음은 국가(및 선택적으로 주)에서 이 용도로 사용할 woocommerce 후크 및 코드입니다.

add_filter( 'default_checkout_billing_country', 'change_default_checkout_country_and_state' );
add_filter( 'default_checkout_shipping_country', 'change_default_checkout_country_and_state' );
add_filter( 'default_checkout_billing_state', 'change_default_checkout_country_and_state' );
add_filter( 'default_checkout_shipping_state', 'change_default_checkout_country_and_state' );
function change_default_checkout_country_and_state( $default ) {
    return null;
}

또는 더 짧습니다.

add_filter( 'default_checkout_billing_country', '__return_null' );
add_filter( 'default_checkout_shipping_country', '__return_null' );
add_filter( 'default_checkout_billing_state', '__return_null' );
add_filter( 'default_checkout_shipping_state', '__return_null' );

코드는 함수에 들어갑니다.활성 하위 테마(또는 활성 테마)의 php 파일입니다.테스트를 거쳐 작동합니다.

참고: default_checkout_country그리고.default_checkout_state후크는 WooCommerce 3 이후로 더 이상 사용되지 않고 교체되었습니다.

관련:WooCommercommercommerce: 로그아웃되지 않은 사용자의 체크아웃 페이지에서 기본적으로 국가 설정

이를 달성하기 위한 최신 방법은 항상 Woocommerce 문서에서 확인할 수 있습니다.

또한 기존(로그인한) 고객의 기본 국가를 제거하는 것이 바람직하지 않을 수도 있습니다.적어도 고객에게 고객 계정을 허용하는 사이트에서.이러한 고객의 경우 주소 필드가 자동으로 입력되며, 모든 사용에 대해 기본 국가를 제거하면 국가가 누락되는 경우를 제외하고 주소가 입력됩니다.

그런 점을 염두에 두고 2022년 1월 현재 OP가 요청한 것을 달성하기 위한 유용한 방법으로 이 코드를 제안하고자 합니다.

add_filter( 'default_checkout_billing_country', 'change_default_checkout_country', 10, 1 );

function change_default_checkout_country( $country ) {
    // If the user already exists, don't override country
    if ( WC()->customer->get_is_paying_customer() ) {
        return $country;
    }

    return null; 
}

이것은 WC 문서에 전달된 내용을 약간 변형한 것으로, 기본 국가가 설정된 내용을 변경하는 방법을 설명하고 있습니다.이 경우에는 다음과 같이 설정합니다.Null.

해당 기능이 감가상각되었습니다.

add_filter( 'default_checkout_billing_country', 'change_default_checkout_country' );
add_filter( 'default_checkout_billing_state', 'change_default_checkout_state' );

function change_default_checkout_country() {
    return null;
    //return get_user_meta( get_current_user_id() , 'billing_country', true ); // for retrun user saved country
}

function change_default_checkout_state() {
    return null;
    //return get_user_meta( get_current_user_id() , 'billing_state', true ); // for retrun user saved state
}

WooCommerce 버전 4.5.2에서 테스트됨

저는 함수에 다음 코드를 사용했습니다.php가 전혀 작동하지 않습니다, 어떤 단서가 있습니까?

add_filter( 'default_checkout_billing_country', 'change_default_checkout_country' );

function change_default_checkout_country() {
  return 'UK'; // country code

저는 단지 제가 같은 문제를 해결했다는 것을 알려드리고 싶었습니다.

여기에 작은 플러그인을 작성했습니다. https://github.com/TakesTheBiscuit/woocommerce_set_country

여기서 주요 사용자 환경 수정 사항은 사용자가 카트나 체크아웃에 들어가기 전에 선택 상자를 제공하는 것입니다. 그러면 사용자 환경을 사용자 지정 가격, 배송 요금, 세금 등과 같은 세션에 맞게 다른 곳에서 사용자 환경을 조정할 수 있습니다.

플러그인을 작성하는 동안 admin(일반적으로 사이트 소유자로 로그인한 관리자)이 이미 국가를 설정한 경우가 많다는 것도 알게 되었습니다. 따라서 기능을 테스트하기 위해 관리자를 기본 국가에서 제외하고 싶습니다.

function change_default_checkout_country($country) {

if (current_user_can( 'manage_options' )) {
    } else {
        if ( WC()->customer->get_is_paying_customer() ) {
            return $country;
        }
    }

    $returnCountry = '';
    if (strlen($_SESSION['wc_country_iso']) == 2) {
        $returnCountry = $_SESSION['wc_country_iso'];
    } else {
        $countries_obj   = new WC_Countries();
        $returnCountry = $countries_obj->get_base_country();
    }

    return $returnCountry;
}

add_filter( 'default_checkout_billing_country', 'change_default_checkout_country' , 10, 1 );

마지막으로 생각해 보겠습니다. 배송 계산기가 이러한 기본 국가를 계산할 수 없다는 것을 알게 될 것입니다. 실망스럽게도 - 따라서 이 문제도 해결해야 할 것입니다.

언급URL : https://stackoverflow.com/questions/37104693/woocommerce-set-country-by-default-in-checkout-page

반응형