codememo

Woocommerce - 플러그인에서 제품 유형을 확인하는 방법

tipmemo 2023. 3. 14. 21:39
반응형

Woocommerce - 플러그인에서 제품 유형을 확인하는 방법

워드프레스/우커머스는 처음이라 커스텀 플러그인을 만드는 것을 막 시작했습니다.

지금까지 API를 통해 커스텀 woocommerce 설정을 추가했습니다.

제품 데이터 탭의 단일 제품에 사용자 지정 필드를 추가하는 문제가 발생했습니다.

다음 코드를 사용하여 표시할 수 있었습니다.

add_action( 'woocommerce_product_options_general_product_data', array( $this, 'cuzd_general_fields' ) );
add_action( 'woocommerce_process_product_meta', array( $this, 'cuzd_general_fields_save') );

하지만 지금은 제품의 종류가 단순한지 아니면 변형인지 확인해야 합니다.다음을 시도했습니다.

$product = new WC_Product( get_the_ID() );
        if( $product->is_type( 'simple' ) ) {
          //
}

단, 다음과 같은 에러가 발생합니다.

 Fatal error: Class 'WC_Product' not found in ....

제품 클래스를 호출하기 전에 시작하려고 합니다.클래스 플러그인의 전체 형식이 잘못되었을 수 있습니다.좋은 지침/베스트 프랙티스가 있는 어떤 독서 자료라도 감사할 것입니다.

아니면 위의 간단한 수정사항이라면 알려주세요.

Woo 클래스에 가장 빨리 접속할 수 있는 것은woocommerce_loaded현재 발사되고 있는 훅plugins_loaded훅. 만약 당신이 돈을 절약하고 있다면woocommerce_process_product_meta그러면 콜백은 모든 클래스가 올바르게 로드됩니다.콜백 외부에서 테스트하고 있는 경우(후크에 전혀 접속되어 있지 않은 경우)모든 클래스가 제대로 로드되지 않을 수 있습니다.

또, 콜을 시도하고 있는 경우는,get_the_ID()이 되기 전에WP_Post개체가 설정되었습니다. 올바른 값을 얻을 수 없습니다.

보다 완전한cuzd_general_fields_save루틴은 다음과 같습니다.

/**
 * Save meta box data.
 *
 * @param int     $post_id WP post id.
 */
public function cuzd_general_fields_save( $post_id ) {

    $_product = wc_get_product( $post_id );

    if( $_product->is_type( 'simple' ) ) {
    // do stuff for simple products
    } else {
    // do stuff for everything else
    }

    $_product->save();

}

Woo 3.0에 대한 업데이트는 다음과 같습니다.woocommerce_admin_process_product_object따라서 더 이상 제품 개체를 인스턴스화하거나 실행할 필요가 없습니다.save()우씨가 핵심으로 다룰 것이기 때문입니다.

add_action( 'woocommerce_admin_process_product_object', array( $this, 'cuzd_general_fields_save') );

그러면 콜백이 다음과 같이 변경됩니다.

/**
 * Save meta box data.
 *
 * @param obj $_product WC_Product.
 */
public function cuzd_general_fields_save( $_product ) {

    if( $_product->is_type( 'simple' ) ) {
    // do stuff for simple products
    } else {
    // do stuff for everything else
    }

}

다음은 제품의 인스턴스를 생성하지 않고 제품 유형을 확인하는 한 가지 방법입니다.

$product_type = get_the_terms( $product_id,'product_type')[0]->slug;

간단한 방법은 단순히 게시물의 가치를 확인하는 것입니다.select다음 작업을 수행할 수 있습니다.

$product_type = $_POST['product-type'];

if ( $product_type == 'simple' ) {
 // do what you want
}

언급URL : https://stackoverflow.com/questions/26766257/woocommerce-how-to-check-product-type-in-plugin

반응형