source

Woocommerce의 Linked Product에서 커스텀 필드를 추가하는 방법

gigabyte 2023. 2. 28. 23:33
반응형

Woocommerce의 Linked Product에서 커스텀 필드를 추가하는 방법

Stack Overflow의 모든 개발자에게 감사드립니다.

Woocommerce의 Linked Product 섹션에 필드를 추가하고 싶습니다.필드는 업셀/크로셀과 비슷해야 합니다.

지금까지의 코드:-

add_action( 'woocommerce_product_options_linked_product_data', 'woocom_general_product_data_custom_field' );

 woocommerce_wp_text_input( 
    array( 
      'id' => '_upsizing_products', 
      'label' => __( 'Upsizing Products', 'woocommerce' ), 
      'placeholder' => 'Upsizing Products',
      'desc_tip' => 'true',
      'description' => __( 'Select Products Here', 'woocommerce' ) 
    )
  );

위의 코드에는 콤보박스가 필요합니다.예를 들어 입력란에 3자를 입력하면 선택 가능한 일치 제품 목록이 나타납니다.업셀 / 크로스셀과 유사합니다.

이 커스텀 필드를 구현할 수 있도록 도와주세요.잘 부탁드립니다.

편집: 누구 없나요?

위의 코드에는 몇 가지 정보가 누락되어 있습니다.

  1. 첫 번째 줄에 사용한 후크가 존재하지 않습니다.오른쪽 훅은woocommerce_product_options_related
  2. 사용자 지정 필드를 설계한 코드가 함수 안에 없습니다.
  3. 표준 텍스트 필드를 만들고 있습니다."Select Product(제품 선택)" 드롭다운을 원하는 경우 다른 방법을 사용해야 합니다.이것은 후크에서 사용하는 기능 안에 있어야 합니다.
  4. 사용자 지정 필드에서 실제로 데이터를 저장하는 후크와 함수가 없습니다.

1. 적절한 후크/액션 찾기

사용할 올바른 훅을 찾으려면 WoocCommerce 플러그인 내에서 "woocommerce_product_options_"를 검색하면 약 6개의 PHP 파일이 나타납니다.이러한 파일 중 하나는 "html-product-data-linked-products.php"입니다.이 파일에는 특정 WooCommerce 섹션의 기존 옵션이 모두 포함되어 있습니다.또한 이러한 옵션을 표시하는 데 사용되는 후크도 포함되어 있습니다.

파일을 열고 확인하세요.후크는 페이지 하단에 있습니다.

풀패스: /wp-content/plugins/woocommerce/includes/admin/metaboxes/뷰/


2. 드롭다운 생성

제품 검색을 포함한 선택 드롭다운을 만들려면 위의 코드와 크게 다른 코드가 필요합니다.

여유 시간은 위에서 설명한 파일에 있는 기존 옵션 중 하나를 복사하여 붙여넣은 다음 필요에 따라 수정할 수 있습니다.

이 모든 것을 다음과 같은 함수에 배치해야 합니다.woocom_linked_products_data_custom_field().

2.1. ID/이름 변경

코드에서 가장 먼저 수정해야 하는 것은 물론 필드의 고유 ID/이름입니다.이것은 에 배치되어 있습니다.label- 태그()forselect- 태그(id ).

은 아이디/이름이 있어야 .upsizing_products 라벨 " " " " 입니다.Upsizing Products:

<label for="upsizing_products"><?php _e( 'Upsizing Product', 'woocommerce' ); ?></label>
<select class="wc-product-search" multiple="multiple" style="width: 50%;" id="upsizing_products" name="upsizing_products[]" data-placeholder="<?php esc_attr_e( 'Search for a product&hellip;', 'woocommerce' ); ?>" data-action="woocommerce_json_search_products_and_variations" data-exclude="<?php echo intval( $post->ID ); ?>">

메모: 잊지 말고[]이름 태그의 끝을 지정하지 않으면 데이터가 저장되지 않습니다.

2.2. 이미 선택한 제품 표시

다음으로 WooCommerce 섹션에서 이미 선택한 제품과 드롭다운을 표시 및 하이라이트합니다.

위해서는, 「」를 해 주세요.$product_ids- 아, 줄 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아.

$product_ids = get_post_meta( $post->ID, '_upsizing_products_ids', true );

대신 기존 옵션 중 하나(예: cross_sell_ids)가 아닌 데이터베이스 사용자 지정 필드에서 제품 ID가 검색됩니다.

주의:_upsizing_products_ids는 데이터베이스 내의 메타키 이름입니다.이 키와 관련된 메타 값에는 모든 필드 데이터가 포함됩니다.사용자 지정 필드를 저장 및 검색하는 데 사용됩니다.

2.3. WooCommerce 섹션의 필드를 표시합니다.

마지막으로 기능이 올바르게 잠기면 링크된 제품 섹션에 표시됩니다.

add_action( 'woocommerce_product_options_related', 'woocom_linked_products_data_custom_field' );

3. 데이터 저장 및 저장

이제 오른쪽 섹션 안에 사용자 지정 필드가 표시됩니다.다음으로 데이터를 저장하고 데이터베이스에 저장합니다.

기능에서는 「」를 합니다.$_POST것, 「데이터 취득」을 실시합니다.update_post_metapost-ID, 고유 필드 ID/이름(메타) 및 자체 데이터(메타)를 포함하는 데이터베이스에 데이터를 저장합니다.

function woocom_linked_products_data_custom_field_save( $post_id ){
    $product_field_type =  $_POST['upsizing_products'];
    update_post_meta( $post_id, '_upsizing_products_ids', $product_field_type );
}
add_action( 'woocommerce_process_product_meta', 'woocom_linked_products_data_custom_field_save' );

여기 전체 코드가 있습니다.에 ★★★★★★★★★★★★★★★★★★★★★★★functions.php「 」의 「 」의 「 」

// Display the custom fields in the "Linked Products" section
add_action( 'woocommerce_product_options_related', 'woocom_linked_products_data_custom_field' );

// Save to custom fields
add_action( 'woocommerce_process_product_meta', 'woocom_linked_products_data_custom_field_save' );


// Function to generate the custom fields
function woocom_linked_products_data_custom_field() {
    global $woocommerce, $post;
?>
<p class="form-field">
    <label for="upsizing_products"><?php _e( 'Upsizing Product', 'woocommerce' ); ?></label>
    <select class="wc-product-search" multiple="multiple" style="width: 50%;" id="upsizing_products" name="upsizing_products[]" data-placeholder="<?php esc_attr_e( 'Search for a product&hellip;', 'woocommerce' ); ?>" data-action="woocommerce_json_search_products_and_variations" data-exclude="<?php echo intval( $post->ID ); ?>">
        <?php
            $product_ids = get_post_meta( $post->ID, '_upsizing_products_ids', true );

            foreach ( $product_ids as $product_id ) {
                $product = wc_get_product( $product_id );
                if ( is_object( $product ) ) {
                    echo '<option value="' . esc_attr( $product_id ) . '"' . selected( true, true, false ) . '>' . wp_kses_post( $product->get_formatted_name() ) . '</option>';
                }
            }
        ?>
    </select> <?php echo wc_help_tip( __( 'Select Products Here.', 'woocommerce' ) ); ?>
</p>

<?php
}

// Function the save the custom fields
function woocom_linked_products_data_custom_field_save( $post_id ){
    $product_field_type =  $_POST['upsizing_products'];
    update_post_meta( $post_id, '_upsizing_products_ids', $product_field_type );
}

하려면 , 「」를 사용합니다._upsizing_products_ids:

echo get_post_meta( $post->ID, 'my-field-slug', true );

WooCommerce용 커스텀필드에 대한 자세한 내용은 이 가이드에서 Mastering WooCommerce 제품 커스텀필드를 참조하십시오.

언급URL : https://stackoverflow.com/questions/45199599/how-to-add-more-custom-field-in-linked-product-of-woocommerce

반응형