WooCommerce 배송 지역 방법 사용자 정의
P粉558478150
P粉558478150 2023-08-29 10:57:38
0
1
503
<p>저는 사용자 정의 배송 지역 방법을 생성하기 위한 솔루션을 구현하는 올바른 방법을 찾으려고 몇 시간을 보냈습니다. </p> <p>WC:7.2.2 업무 스트레스: 6.0.3</p> <p>사이트 상태가 양호하며 권한 오류 등이 없습니다(사용 가능한 정보만 업데이트)</p> <p>다음과 같은 다양한 소스를 사용했습니다. https://woocommerce.github.io/woocommerce-rest-api-docs/?php#shipping-zone-methods</p> <p>https://github.com/woocommerce/woocommerce/wiki/Shipping-Method-API#properties</p> <p>https://gist.github.com/mikejolley/3b37b9cc19a774665f31</p> <p>https://code.tutsplus.com/tutorials/create-a-custom-shipping-method-for-woocommerce--cms-26098</p> <p>그 외에도 많이 있습니다. </p> <p>기본적으로 맞춤 배송비 기능이 포함된 배송 지역 방법을 생성(플러그인)하려면 샘플 코드가 필요합니다. 우리는 WooCommerce Easy Booking을 기반으로 하며 메타데이터에 날짜가 있으므로 이를 처리하기 위해 wooCommerce 공식 프리미엄 플러그인 중 하나를 사용할 수 없습니다.</p> <p>我最终得到了以下代码:</p> <pre class="brush:php;toolbar:false;"><?php if (!definated('ABSPATH')) { 출구; // 직접 접근했다면 종료 } your_shipping_method_init() 함수 { if (!class_exists('WC_Your_Shipping_Method')) { WC_Your_Shipping_Method 클래스는 WC_Shipping_Method를 확장합니다. { /*** 배송 클래스의 생성자 * * @접속 공개 * @return 무효*/ 공개 함수 __construct() { $this->id = '다이어트_일_배송'; // 배송 방법 ID입니다. 고유해야 합니다. $this->method_title = __('다이어트일당 배송'); // 관리자에 표시된 제목 $this->method_description = __('예약당 배송비'); // 관리자에 표시되는 설명 $this->enabled = "예";; // 이는 설정으로 추가될 수 있지만 이 예에서는 강제로 활성화됩니다. //$this->title = "간편한 예약배송 하루당 배송" // 이는 설정으로 추가할 수 있지만 이 예에서는 강제입니다. //$this->rates = array('calculate_shipping'); $this->지원 = 배열( '배송 지역', '인스턴스 설정', '인스턴스 설정-모달', ); $this->instance_form_fields = 정렬( '제목' => 정렬( '제목' => __('메소드 제목'), '유형' => '텍스트', '설명' => __('결제 시 사용자에게 표시되는 제목을 제어합니다.'), '기본값' => __('당신의 다이어트를 위한 매일 배달'), ), '비용' => 정렬( '제목' => __('비용'), '유형' => '숫자', '설명' => __('이것은 하루 비용을 제어합니다.'), '기본값' => 7, ) ); $this->init(); $this->title = $this->get_option('제목'); $this->cost = $this->get_option('비용'); add_action('woocommerce_update_options_shipping_' . $this->id, array($this, 'process_admin_options')); }/*** 설정 초기화 * * @접속 공개 * @return 무효*/ 함수 초기화() { // 설정 API를 로드합니다. $this->init_form_fields(); // 정의된 설정이 있는 경우 관리자에 설정을 저장합니다. add_action('woocommerce_update_options_shipping_' . $this->id, array($this, 'process_admin_options')); } 함수 init_form_fields() { $this->form_fields = 배열( '제목' => 정렬( '제목' => __('메소드 제목'), '유형' => '텍스트', '설명' => __('결제 시 사용자에게 표시되는 제목을 제어합니다.'), '기본값' => __('일일 다이어트 배송비'), ), '비용' => 정렬( '제목' => __('비용'), '유형' => '숫자', '설명' => __('이것은 하루 비용을 제어합니다.'), '기본값' => 7, ) ); } /*** 계산_배송 기능. * @param array $package (기본값: array())*/ 공용 함수 계산_배송($패키지 = 배열()) { //테스트용 하드코드 $shipping_number = 7; //아마도 최종 배송비를 계산하는 방법일 것입니다. /* foreach ($package['contents'] as $item_id => $values) { $_product = $values['데이터']; $shipping_number = $shipping_number + $_product->wceb_get_product_booking_duration() * $values['수량']; }*/ $this->add_rate(배열( 'ID' => $this->id . $this->instance_id, '라벨' => '도스타와 포자 와와', '비용' => $배송_번호, ))); } } } } add_action('woocommerce_shipping_init', 'your_shipping_method_init'); 함수 add_your_shipping_method($methods) { $methods['diet_day_shipping'] = 'WC_Your_Shipping_방법'; $method를 반환합니다. } add_filter('woocommerce_shipping_methods', 'add_your_shipping_method');</pre> <p>저는 2개의 콘텐츠를 보유하고 있습니다. <p>저는 "编辑"을 사용하여 아래의 방법을 사용합니다.</p> <p>내 코드를 수정하는 데 도움을 줄 수 있는 사람이 있나요? </p> <p>현재 관리자 패널에는 설정 옵션이 표시되지 않습니다. 배송 지역 방법 행이나 sgipping 설정 패널에 없습니다. </p> <p>또한 맞춤 배송 방법을 사용하여 특정 지역에서 우편번호를 보낼 때 장바구니에 해당 우편번호에 사용할 수 있는 배송 방법이 없다고 표시됩니다.</p>
P粉558478150
P粉558478150

모든 응답(1)
P粉833546953

저도 매우 비슷한 문제를 해결하기 위해 어제 3시간, 오늘 또 1시간을 보냈습니다. 나는 이제 해결책을 찾았거나 적어도 당신이 올바른 방향으로 나아갈 수 있도록 도울 수 있다고 믿습니다. 공식 WooCommerce 문서는 SettingsInstance 설정을 구별하는 것 같습니다(또는 인스턴스 설정에 대한 문서를 찾을 수 없습니다. 자세한 내용은 다음 단락에서 확인하세요).

다음은 지금까지 시행착오를 통해 알아낸 내용을 바탕으로 한 것입니다. 이에 대한 "공식" 문서가 있는 사람이 있다면 이 답변에 대한 의견을 기다리겠습니다.

"설정"과 "인스턴스 설정"을 구별하는 것이 중요합니다. WooCommerce 백엔드를 시각적으로 비교하려면 다음 이미지를 참조하세요.

설정

설정은 "글로벌 배송 모드 설정"을 참조합니다. 즉, 글로벌 하위 메뉴에 표시되지만 배송 지역 내에 표시되지는 않습니다. 공식 WooCommerce 문서에는 설정 사용 방법과 새 설정 페이지 추가 방법이 나와 있습니다.

https://woocommerce.com/document/shipping-method-api/一个>

https://woocommerce.com/document/settings-api/ p>

설정 기능/API를 사용하려면 지정해야 합니다.

으아악

생성자에서.

"설정"은 전 세계적으로, 즉 개별 배송 지역과 관계없이 적용/사용/저장됩니다.

인스턴스 설정

인스턴스 설정은 배송 지역별로 개별적으로 저장할 수 있는 설정입니다. 사용하려면

을 사용해야 합니다. 으아악

생성자에서.

다음 예를 통해 인스턴스 설정 API의 미묘하지만 중요한 차이점을 이해할 수 있습니다.

https://gist.github.com/malkafly/57a5e07fd03d6fd5cab84c6182d84c86

코드 차이점 및 원래 질문에 관한

이 두 API의 정확한 기능과 속성에는 미묘한 차이가 있습니다. 상황에 따라 이러한 API 중 하나를 사용하기로 결정한 다음 해당 API를 엄격하게 사용해야 합니다. 두 API를 혼동하고 있습니다. 이로 인해 맞춤 배송 방법이 작동하지 않을 수 있습니다.

(전역) 설정 API를 사용하려는 경우:

  • $this->supports = array('배송 지역', '설정');
  • $this->form_fields 사용($this->instance_form_fields 대신)
  • $this->settings['title']을 사용하여 저장된 설정을 검색하세요

(배송 지역별) 인스턴스 설정 API를 사용하려는 경우:

  • 생성자가 다음과 같거나 다음 코드를 포함하는지 확인하세요.

    으아악
  • $this->instance_settings['title']을 사용하여 저장된 설정을 검색하세요

위에 게시한 해당 설정/인스턴스 설정 카테고리의 링크에는 각 방법에 대한 추가(작동) 코드 예제가 많이 포함되어 있습니다.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿