WooCommerce에서 커스텀 재고 상태 추가
상품의 스톡옵션 드롭다운목록에 새로운 옵션을 추가하고 싶습니다.기본적으로는 "품절", "재고 있음"이 있으며, 세 번째 옵션을 추가하고 싶습니다.
드롭다운을 표시하는 메서드를 찾았습니다(class-wc-meta-box-product-data.php).
// Stock status
woocommerce_wp_select( array( 'id' => '_stock_status', 'wrapper_class' => 'hide_if_variable', 'label' => __( 'Stock status', 'woocommerce' ), 'options' => array(
'instock' => __( 'In stock', 'woocommerce' ),
'outofstock' => __( 'Out of stock', 'woocommerce' )
), 'desc_tip' => true, 'description' => __( 'Controls whether or not the product is listed as "in stock" or "out of stock" on the frontend.', 'woocommerce' ) ) );
do_action( 'woocommerce_product_options_stock_status' );
단, 커스텀 코드를 잃지 않고 Woocommerce를 갱신할 수 있도록 Woocommerce 클래스를 직접 편집하고 싶지는 않습니다.이 방법을 덮어쓸 수 있는 방법이 있습니까?
Laila의 접근방식을 바탕으로 한 완전한 솔루션을 소개합니다.경고!이 솔루션은 WooCommerce의 "재고 관리" 옵션이 비활성화된 경우에만 작동합니다.저는 정확한 재고 수량을 가지고 작업을 하고 있지 않습니다.모든 코드는 다음 주소로 이동합니다.functions.php
,평소처럼.
백엔드 부품
기본 재고 상태 드롭다운 필드를 제거하는 중입니다.새로운 커스텀 필드를 구별하기 위해 CSS 클래스를 추가합니다.드롭다운에 "요청 시" 옵션이 새로 추가되었습니다.
function add_custom_stock_type() {
?>
<script type="text/javascript">
jQuery(function(){
jQuery('._stock_status_field').not('.custom-stock-status').remove();
});
</script>
<?php
woocommerce_wp_select( array( 'id' => '_stock_status', 'wrapper_class' => 'hide_if_variable custom-stock-status', 'label' => __( 'Stock status', 'woocommerce' ), 'options' => array(
'instock' => __( 'In stock', 'woocommerce' ),
'outofstock' => __( 'Out of stock', 'woocommerce' ),
'onrequest' => __( 'On Request', 'woocommerce' ), // The new option !!!
), 'desc_tip' => true, 'description' => __( 'Controls whether or not the product is listed as "in stock" or "out of stock" on the frontend.', 'woocommerce' ) ) );
}
add_action('woocommerce_product_options_stock_status', 'add_custom_stock_type');
안타깝게도 WooCommerce는 기본 기능으로 "인스톡" 또는 "재고 부족" 값만 저장합니다.그래서 모든 제품 데이터 처리 후 재고 상태를 다시 저장해야 합니다.
function save_custom_stock_status( $product_id ) {
update_post_meta( $product_id, '_stock_status', wc_clean( $_POST['_stock_status'] ) );
}
add_action('woocommerce_process_product_meta', 'save_custom_stock_status',99,1);
템플릿 부품
그리고 마지막 - 제품별로 반환된 데이터를 변경해야 합니다.get_availability()
기능."재고 관리"가 꺼져 있는 경우 WooCommerce는 "재고"와 "재고 부족" 값만 다시 인식합니다.그래서 제가 직접 재고 상황을 체크하고 있습니다.
function woocommerce_get_custom_availability( $data, $product ) {
switch( $product->stock_status ) {
case 'instock':
$data = array( 'availability' => __( 'In stock', 'woocommerce' ), 'class' => 'in-stock' );
break;
case 'outofstock':
$data = array( 'availability' => __( 'Out of stock', 'woocommerce' ), 'class' => 'out-of-stock' );
break;
case 'onrequest':
$data = array( 'availability' => __( 'On request', 'woocommerce' ), 'class' => 'on-request' );
break;
}
return $data;
}
add_action('woocommerce_get_availability', 'woocommerce_get_custom_availability', 10, 2);
방탄 솔루션이 아닐 수도 있고...나중에 업데이트 하겠습니다.
자바스크립트에서 이전 스톡옵션 드롭다운을 숨겼는데
add_action('woocommerce_product_options_stock_status', 'add_custom_stock_type');
function add_custom_stock_type() {
// Stock status - We remove the default one
?>
<script type="text/javascript">
jQuery('_stock_status').remove();
</script>
<?php
}
다음 튜토리얼을 사용하여 새로운 솔루션을 작성했습니다.http://www.remicorson.com/mastering-woocommerce-products-custom-fields/ 이 솔루션이 가장 깨끗한 솔루션인지는 모르겠지만 코어 파일은 건드리지 않습니다! : )
언급URL : https://stackoverflow.com/questions/26912556/add-a-custom-stock-status-in-woocommerce
'programing' 카테고리의 다른 글
Angular에서 요소를 교체하는 방법JS 다이렉트 링크 함수? (0) | 2023.03.17 |
---|---|
PHP 시간대 데이터베이스가 손상되었습니다. 오류 (0) | 2023.03.17 |
admin_init 후크콜백 내부의 커스텀 포스트 타입을 검출하는 방법 (0) | 2023.03.17 |
AngularJS : 어플리케이션의 모든 루트에 대해1개의 해상도를 사용하는 방법 (0) | 2023.03.17 |
스프링 부트 CORS 필터 - CORS 프리플라이트 채널에 성공하지 못함 (0) | 2023.03.17 |