WooCommerce에서 사용자 정의 배송 방법을 추가하는 방법

게시 됨: 2020-09-01

WooCommerce 맞춤 배송 방법 추가 WooCommerce에 익숙하다면 매우 유용한 기능을 갖춘 훌륭한 무료 전자 상거래 솔루션이라는 것을 알 것입니다. 두드러진 점은 WooCommerce가 WordPress의 모듈성과 유사하게 확장성을 염두에 두고 개발되었다는 것입니다.

그러나 WooCommerce에서 추가로 필요한 것이 있다면 예를 들어 맞춤 배송 방법을 추가하려는 경우와 같이 WooCommerce가 필요한 모든 것을 제공하지 않는다는 것을 종종 알게 됩니다. 그럼에도 불구하고 이 간단한 튜토리얼에서처럼 걱정하지 마세요. WooCommerce를 위한 간단한 배송 방법을 만드는 방법을 배우게 될 것입니다. 이 방법은 배송 비용을 계산합니다.

또한 일부 국가에서 배송 방법을 사용할 수 있도록 플러그인에 몇 가지 제한 사항을 추가하는 방법을 배우게 됩니다.

배송 방법에 대한 맞춤 배송 규칙

이 섹션에서는 코드를 만드는 데 사용할 배송 방법에 대한 사용자 지정 배송 규칙을 만듭니다. 배송 방법이 비용을 계산하는 방법과 배송할 수 있는 위치를 정의합니다. 이것은 비용이 우리가 배송해야 하는 무게와 지역에 따라 결정된다는 것을 의미합니다.

이 예에서는 미국, 캐나다, 독일, 영국, 이탈리아, 스페인 및 케냐로 배송합니다. 케냐는 $10, 이탈리아 구역 1은 $30, 스페인 구역 2는 $50, 영국 구역은 $50, 캐나다 구역은 $70입니다.

무게의 경우 0~10kg은 무료, 11~30kg은 5달러, 31~50kg은 10달러, 51~100kg은 20달러로 책정됩니다.

코딩을 시작할 준비가 되었을 수도 있지만 아직까지는 아닙니다! 먼저 WooCommerce Shipping API 에 대해 알아야 합니다. 사용자 정의 배송 방법을 만들려면 WooCommerce 추상 클래스 WC_Shipping_Method에서 클래스를 확장해야 합니다. 다음과 같은 몇 가지 정의된 속성이 있습니다.

  • $id : 배송에 필요한 아이디(슬러그, 키워드)입니다.
  • $number : 정수 ID입니다.
  • $method_title : 관리자에 표시되는 배송 이름입니다.
  • $method_description : admin에 표시되는 배송에 대한 간단한 설명입니다(선택 사항).
  • $enabled : 배송이 활성화되어 있고 사용할 수 있는지 여부에 대한 정보를 제공하는 "예" 또는 "아니요" 문자열 부울입니다.
  • $title : 당사 사이트에 당사의 배송명을 표시하기 위해 사용합니다.
  • $availability : 배송 가능 여부를 정의합니다.
  • $countries : 이 방법이 활성화된 국가의 배열입니다. 기본값은 빈 배열입니다.
  • $tax_status : 기본값은 과세 대상입니다. 과세 대상 품목인 경우 세금이 부과됩니다.
  • $fee : 기본값은 0입니다.
  • $minimum_fee : 메소드의 최소 수수료이며 기본값은 null입니다.
  • $has_settings : 이 메서드에 설정이 있는지 정의합니다. 기본값은 true입니다.
  • $supports : 이 메소드가 지원하는 기능을 포함하는 배열. 기본값은 빈 배열입니다.
  • $rates : 운송비를 등록하려면 요금 배열을 채워야 합니다. 기본값은 빈 배열입니다.

WC_Shipping_Method에 정의된 메소드는 다음과 같습니다.

  • is_taxable() : 배송비 외에 세금을 계산해야 하는지 여부를 반환합니다.
  • add_rate( $args = array() ) : $args 매개변수에 정의된 배송료를 $rates 속성에 푸시합니다.
  • has_settings() : $has_settings 속성의 값을 반환합니다.
  • is_available() : 배송이 가능한 경우 반환하고 $countries 속성에 국가가 설정되어 있고 $availability 속성이 특정 또는 제외를 포함하는 값으로 설정되어 있으면 국가가 배송 가능한 경우 true 또는 false를 반환합니다. .
  • get_title() : 이 배송의 제목을 반환합니다.
  • get_fee( $fee, $total ) : 구문 분석된 $fee 및 $total을 기반으로 이 배송에 대한 수수료 값을 반환합니다.
  • supports( $feature ) : 이 배송 방법이 기능을 지원하는지 여부를 반환합니다.

WC_Shipping_Method 클래스는 WC_Settings_API 클래스를 확장하기 때문에 더 많은 속성과 메서드가 있습니다. 여기서는 편의상 설명하지 않겠습니다.

또한 배송이 설정을 가져오거나 설정하고 배송의 실제 비용을 계산할 수 있도록 다른 방법을 정의해야 합니다. 여기에 나열된 방법은 다음과 같습니다.

  • init() : 양식 필드와 설정을 생성합니다. 그러나 내부의 메서드를 사용하고 __constructor 메서드에서 호출하는 한 다르게 이름을 지정할 수 있습니다.
  • calculate_shipping( $package ) : 이 메서드는 이 배송 비용을 계산하는 데 사용되며 패키지는 배송할 제품이 있는 배열입니다.

나는 compute_shipping 방법에 약간의 초점을 맞추고 싶습니다. 이 예에서는 이 메서드를 사용하여 add_rate 메서드에 추가합니다. 이 메서드는 다음과 같은 여러 옵션이 있는 배열을 허용합니다.

  • id : 요금의 ID입니다.
  • label : 요금에 대한 레이블입니다.
  • cost : 배송비.
  • taxes : 세금 배열을 허용하거나 전혀 허용하지 않으므로 WooCommerce에서 세금을 계산합니다. 세금을 수락하지 않으려면 false를 수락할 수 있습니다.
  • calc_tax : per_order 또는 per_item을 허용합니다. per_item을 사용하는 경우 비용 배열을 제공해야 합니다.

WooCommerce 플러그인 내부에 정의된 WordPress 필터를 사용하여 클래스 이름을 전달하여 등록된 메서드의 배열에 배송 방법을 추가하는 배열을 가져오기 위해 WordPress 필터를 사용합니다. 필터는 woocommerce_shipping_methods라고 합니다.

표에 나와 있는 내용을 바탕으로 이제 이 간단한 자습서의 코딩 섹션으로 이동하여 공유할 PHP 스니펫의 전체 개념을 이해할 수 있도록 하겠습니다.

a) 새 배송 클래스 생성 단계

이 섹션에서는 WooCommerce를 확장하는 새 플러그인으로 배송 방법을 만듭니다.

  1. 먼저 wp-content > 플러그인 을 열고 새 폴더를 만들어야 합니다. 이를 위해 njengah -shipping 이라는 이름을 사용하겠습니다.
  2. 그런 다음 njengah –shipping.php 와 같은 이름의 파일을 생성해야 합니다.
  3. 이 파일 에 다음 코드를 추가합니다.
 <?php

/**
* 플러그인 이름: Njengah Shipping
* 플러그인 URI: https://njengah.com/plugins/
* 설명: 
* 버전: 1.0.0
* 저자: 조 은젠가
* 저자 URI: https://njengah.com
에스
*/

if ( ! 정의된( 'WPINC' ) ) {

주사위;

}
/*
* WooCommerce가 활성화되어 있는지 확인
*/
if ( in_array( 'woocommerce/woocommerce.php', apply_filters( 'active_plugins', get_option( 'active_plugins' ) ) ) ) ) {

함수 njengahplus_shipping_method() {

if ( ! class_exists( 'NjengahPlus_Shipping_Method' ) ) {

클래스 NjengahPlus_Shipping_Method는 WC_Shipping_Method를 확장합니다.

/**

* 배송 클래스의 생성자

*

* @접근 공개

* @반환 무효

*/

공개 함수 __construct() {

$this->id = '엔젠가플러스';

$this->method_title = __( '엔젠가플러스 배송', '엔젠가플러스' );

$this->method_description = __( 'NjengahPlus 맞춤형 배송 방법', 'njengahplus' );

$this->초기화();

$this->enabled = isset( $this->settings['enabled'] ) ? $this->settings['활성화'] : '예';

$this->title = isset( $this->settings['title'] ) ? $this->settings['title'] : __( '엔젠가배송', '엔젠가플러스' );

}

/**
* 설정 초기화
*
* @접근 공개

* @반환 무효

*/

함수 초기화() {

// 설정 API 로드

$this->init_form_fields();

$this->init_settings();

// 정의된 설정이 있는 경우 admin에 설정을 저장합니다.

add_action( 'woocommerce_update_options_shipping_' . $this->id, array( $this, 'process_admin_options' ) );

}


/**

* 이 배송에 대한 설정 필드 정의

* @반환 무효

*/

함수 init_form_fields() {

// 여기에 설정을 추가합니다.

}

/**
* 이 기능은 배송비를 계산하는 데 사용됩니다. 이 함수 내에서 무게, 치수 및 기타 매개변수를 확인할 수 있습니다.
*
* @접근 공개
* @param 혼합 $패키지
 @반환 무효
*/

공개 함수 계산_배송( $패키지 ) {


// 여기에 비용, 비율 및 논리를 추가합니다.

}

}

}

}


add_action( 'woocommerce_shipping_init', 'njengahplus_shipping_method' );

기능 add_njengahplus_shipping_method( $methods ) {

$methods[] = 'NjengahPlus_Shipping_Method';
$메소드를 반환합니다.
}

add_filter( 'woocommerce_shipping_methods', 'add_njengahplus_shipping_method' );

}

작동 원리

  • 먼저 상수 WPINC가 정의되어 있는지 확인합니다. 정의되지 않은 경우 누군가가 이 파일에 직접 또는 WordPress가 아닌 위치에서 액세스를 시도하고 있음을 의미합니다.
  • 그런 다음 WooCommerce가 활성화되어 있는지 확인해야 합니다. 여기에서 woocommerce.php가 active_plugins 옵션 아래 데이터베이스에 저장된 활성 플러그인 배열에 있는지 확인합니다.
  • woocommerce_shipping_init는 인스턴스화되기 전에 모든 배송 클래스를 포함하는 WooCommerce Shipping의 주요 작업입니다. 이 작업을 사용하면 WooCommerce가 초기화된 후 WooCommerce가 사용할 올바른 위치에 배송 방법이 포함됩니다.
  • __construct 메서드는 몇 가지 일반 속성을 설정하고 그 중 일부는 init 메서드의 데이터베이스에서 설정을 로드한 후 쉽게 덮어쓸 수 있습니다.
  • 다른 방법은 나중에 튜토리얼에서 정의할 것이기 때문에 비어 있습니다.

그런 다음 아래 표시된 단계를 사용하여 플러그인을 활성화해야 합니다.

  1. WordPress 사이트에 로그인하고 관리자로 대시보드 에 액세스합니다.
  2. 대시보드 메뉴에서 플러그인을 클릭하고 아래와 같이 Njengah 배송을 활성화합니다. 플러그인 활성화
  3. 플러그인을 활성화한 후 WooCommerce > 설정 으로 이동합니다. WooCommerce 탭을 클릭한 다음 NjengahPlus 배송 을 클릭하십시오. 다음을 볼 수 있어야 합니다. 첫 번째 코드의 결과

b) 국가 가용성 설정

우리가 만든 배송 방법은 이전에 결정된 국가 목록에서만 사용할 수 있습니다.

  1. __construct 메서드에 다음을 추가합니다 .
 <?php

//...

$this->method_description = __( 'NjengahPlus 맞춤형 배송 방법', 'njengahplus' );

// 가용성 및 국가

$this->availability = '포함';

$이->국가 = 배열(

'US', // 아메리카 합중국

'CA', // 캐나다

'DE', // 독일

'GB', // 영국

'IT', // 이탈리아

'ES', // 스페인

'HR' // 케냐

);

$this->초기화();

//...

코드 작동 방식

이 배송은 국가 속성의 국가에서만 사용할 수 있도록 가용성 속성이 '포함'으로 설정되어 있습니다.

WooCommerce는 배송 국가가 속성 국가에 포함되어 있는지 확인합니다.

설정 만들기

이 코드를 복사하고 init_form_fields 메소드를 채우면 됩니다.

 <?php



함수 init_form_fields() {

$this->form_fields = 배열(

'활성화' => 배열(

'제목' => __( '활성화', '엔젠가플러스' ),

'유형' => '확인란',

'description' => __( '이 배송을 활성화합니다.', 'njengahplus' ),

'기본' => '예'

),


'제목' => 배열(

'제목' => __( '제목', '엔젠가플러스' ),

'유형' => '텍스트',

'설명' => __( '사이트에 표시할 제목', 'njengahplus' ),

'default' => __( '엔젠가플러스 배송', '엔젠가플러스' )

),


);


}

결과를 확인하려면 다음 단계를 따르세요.

  1. WordPress 사이트에 로그인하고 관리자로 대시보드 에 액세스합니다. 대시보드 메뉴에서 WooCommerce > 설정 을 클릭합니다.
  2. 배송 탭을 클릭하고 아래와 같이 NjengahPlus 배송을 클릭합니다. Njengah 플러스 배송
  3. 확인란을 활성화하고 변경 사항을 저장합니다.

최대 100kg까지 배송하도록 배송 방법을 설정할 수 있습니다. 그런 다음 해당 규칙이 곧 변경되면 설정에서 수정할 수 있습니다. 이것을 설정하면 설정 코드 는 다음과 같습니다.

 <?php




함수 init_form_fields() {

$this->form_fields = 배열(

'활성화' => 배열(

'제목' => __( '활성화', '엔젠가플러스' ),

'유형' => '확인란',

'description' => __( '이 배송을 활성화합니다.', 'njengahplus' ),

'기본' => '예'

),


'제목' => 배열(

'제목' => __( '제목', '엔젠가플러스' ),

'유형' => '텍스트',

'설명' => __( '사이트에 표시할 제목', 'njengahplus' ),

'default' => __( '엔젠가플러스 배송', '엔젠가플러스' )

),


'가중치' => 배열(

'제목' => __( '체중(kg)', '엔젠가플러스' ),

'유형' => '숫자',

'description' => __( '최대 허용 무게', 'njengahplus' ),

'기본값' => 100

),


);

}

위의 코드에서는 이제 설정에서 최대 가중치를 설정했습니다. 결과는 다음과 같습니다. 최대 무게

c) 배송비 계산

배송비를 계산하기 위해 각 단계를 이해할 수 있도록 한 단계씩 계산_배송 방법을 업데이트합니다.

  1. 먼저 무게로 비용 을 구해야 합니다. 이렇게 하려면 다음 코드를 compute_shipping 메서드에 추가하기만 하면 됩니다.
 <?php

//...

공개 함수 계산_배송( $패키지 ) {


$가중치 = 0;

$비용 = 0;

$country = $package["목적지"]["국가"];

foreach ( $package['contents'] as $item_id => $values ​​)

{

$_product = $value['데이터'];

$weight = $weight + $_product->get_weight() * $values['수량'];

}

$weight = wc_get_weight( $weight, 'kg' );

if( $가중치 <= 10 ) {

$비용 = 0;

} elseif( $가중치 <= 30 ) {

$비용 = 5;


} elseif( $가중치 <= 50 ) {


$비용 = 10;


} 또 다른 {

$비용 = 20;

}

}
  1. 위의 코드에서 장바구니 무게를 기준으로 비용을 계산하고 선택한 배송 국가에 대한 비용을 계산해야 합니다. 이렇게 하려면 다음 코드를 추가하세요.
 <?php


공개 함수 계산_배송( $패키지 ) {


$countryZones = 배열(

'HR' => 0,

'미국' => 3,

'GB' => 2,

'캐나다' => 3,

'ES' => 2,

'데' => 1,

'그것' => 1

);


$zonePrices = 배열(

0 => 10,

1 => 30,

2 => 50,

3 => 70

);


$zoneFromCountry = $countryZones[ $country ];

$priceFromZone = $zonePrices[ $zoneFromCountry ];


$cost += $priceFromZone;

}

  1. 총 중량으로 비용을 계산하고 배송 국가별로 비용을 추가했습니다. 마지막 단계는 이 코드를 추가하여 요금을 등록하는 것입니다.

코드 작동 방식

이 섹션의 첫 번째 스니펫에서는 $weight , $cost , $country 등 몇 가지 시작 변수를 정의했습니다. 총계를 구하려면 장바구니를 반복하고 장바구니에 있는 각 제품의 중량을 변수 $weight 에 추가하여 총 중량을 얻습니다.

총 무게를 얻은 후 function wc_get_weight 를 사용하여 무게를 킬로그램으로 변환하고 있습니다. 이는 배송 방법에서 제한을 설정한 단위이기 때문입니다. 그런 다음 마지막으로 제한을 100kg으로 설정했습니다.

두 번째 스니펫에서 $countryZones 배열은 각 국가의 구역을 보유하고 두 번째 어레이 $zonePrices 는 각 구역의 가격을 보유합니다.

이탈리아 Zone 1의 결과는 다음과 같습니다. 결과 이탈리아

이것은 Spain Zone 2의 결과입니다. 결과 스페인

다음은 캐나다 지역에 대한 결과입니다.

최종 결과

이 코드를 구현하는 데 어려움을 겪었다면 전체 코드는 다음과 같습니다.

 <?php


공개 함수 계산_배송( $패키지 ) {

$가중치 = 0;

$비용 = 0;

$country = $package["목적지"]["국가"];

foreach ( $package['contents'] as $item_id => $values ​​)

{

$_product = $value['데이터'];

$weight = $weight + $_product->get_weight() * $values['수량'];

}
$weight = wc_get_weight( $weight, 'kg' );

if( $가중치 <= 10 ) {

$비용 = 0;

} elseif( $가중치 <= 30 ) {

$비용 = 5;

} elseif( $가중치 <= 50 ) {

$비용 = 10;

} 또 다른 {

$비용 = 20;

}

$countryZones = 배열(

'HR' => 0,

'미국' => 3,

'GB' => 2,

'캐나다' => 3,

'ES' => 2,

'데' => 1,

'그것' => 1

);




$zonePrices = 배열(

0 => 10,

1 => 30,

2 => 50,

3 => 70

);


$zoneFromCountry = $countryZones[ $country ];

$priceFromZone = $zonePrices[ $zoneFromCountry ];

$cost += $priceFromZone;

$rate = 배열(

'id' => $this->id,

'레이블' => $this->제목,

'비용' => $비용

);

$this->add_rate( $rate );

}

결론

이 게시물에서는 WooCommerce에서 사용자 정의 배송 방법을 추가하는 사용자 정의 플러그인을 만들었습니다. 또한 간단한 단계로 배송 방법을 만들 수 있는 WooCommerce 배송 API를 공유했습니다. 또한 배송 방법의 가용성 또는 비용을 계산할 때 배송 방법 내에서 제한 및 가용성을 설정할 수 있습니다. 그러나 WooCommerce 작업을 사용하여 배송 방법 외부에서 설정할 수 있습니다. 이 튜토리얼이 WooCommerce에서 사용자 정의 배송 방법을 추가하기 위한 솔루션을 제공하기를 바랍니다.

유사한 기사