programing

WooCommerce:"Product Add-ons" 확장에서 필드를 표시하는 방법

instargram 2023. 3. 28. 21:13
반응형

WooCommerce:"Product Add-ons" 확장에서 필드를 표시하는 방법

WooCommerce용 [Product Add-ons][1] 확장자를 사용하고 있습니다.이 확장자는 제품에 대한 사용자 지정 필드를 허용합니다.이것은 단일 제품 템플릿에 자동으로 표시됩니다.

단일 제품 템플릿의 시행착오로 인해 이 템플릿은 어딘가에 연결되어 있는 것 같습니다.woocommerce_single_product_summary(single_single?)

동일한 폼 필드 세트를 가져와서archive-product템플릿(제품 목록)을 참조하십시오.제 경우, 카드 신청과 납기 신청의 필드입니다.둘 다 제품 아카이브에서 장바구니에 제품을 추가하기 전에 필요합니다.좀 더 고도의 코딩이 필요한 경우, 이 기능을 호출할 수 있을지 모르겠습니다.


펠레디드의 답변에 따라 애드온 필드를 표시할 수 있었습니다.이 필드를 함수에 추가할 수 있습니다.php:

add_action( 'woocommerce_after_shop_loop_item_title', array($GLOBALS['Product_Addon_Display'], 'display'), 10);

첫 번째 시도

문제는 제품 아카이브가 폼 요소를 작성하는 것이 아니라 Add to Cart 버튼의 앵커 링크만 작성하는 것이었습니다.그래서 수동으로 폼을 넣으려고 했어요.코드 송신원content-product.php:

<?php do_action( 'woocommerce_before_shop_loop_item' ); ?>
<h2><?php the_title(); ?></h2>

<?php // MANUALLY PUT IN FORM, BECAUSE HOOKS ONLY PUT IN A BUTTON AND NO FORM. NEEDED FOR ADD-ON FIELDS ?>
<form class="cart" method="post" enctype='multipart/form-data'>
    <?php
        /**
         * woocommerce_after_shop_loop_item_title hook
         *
         * @hooked woocommerce_template_loop_rating - 5
         * @hooked woocommerce_template_loop_price - 10
         */
        do_action( 'woocommerce_after_shop_loop_item_title' );
    ?>          
    <div itemprop="description">
        <?php the_content(); ?>
    </div>
    <input type="hidden" name="add-to-cart" value="<?php echo esc_attr( $product->id ); ?>" />
    <button type="submit" class="single_add_to_cart_button button alt"><?php echo $product->single_add_to_cart_text(); ?></button>
</form>

<?php //do_action( 'woocommerce_after_shop_loop_item' ); ?>

이것은 효과가 있었지만, AJAX의 송신과 플래시 메세지가 약간 혼란스러워졌습니다.[ Add to cart ]버튼을 클릭하면 페이지가 새로고침되어 아무 일도 일어나지 않은 것처럼 보입니다.다만, 다른 페이지로 이동하면, 메세지가 표시됩니다(또, 복수의 페이지를 스택 할 수 있습니다).

두 번째 시도

그래서 원래의 AJAX 카트 버튼(폼 내가 아님)이 쿼리 문자열을 사용하여 제품 ID를 전송하고 있는 것을 확인했습니다.이제 카트 JS에 추가를 수정하여 추가 매개변수를 적용하려고 합니다.이거 성공했어.내가 한 일이 인정된 답변으로 추가되었다.

jQuery를 사용하여 양식 필드 값을 AJAX 요청에 추가하는 방법으로 작동하는 솔루션을 찾았습니다.이를 위해서는 add-to-cart.js를 자신의 버전으로 덮어쓸 필요가 있기 때문에 그 파일의 향후 업데이트를 Marge할 필요가 있습니다.

기능 중.php

// display add-on fields in woocommerce_after_shop_loop_item_title
add_action( 'woocommerce_after_shop_loop_item_title', array($GLOBALS['Product_Addon_Display'], 'display'), 10);

// Our custom cart JS to allow for product add-on fields on product archive
add_action( 'wp_enqueue_scripts', 'load_woo_scripts', 9 );
function load_woo_scripts() { 
    wp_enqueue_script( 'wc-add-to-cart', get_template_directory_uri() . '/js/add-to-cart.js', array( 'jquery' ), WC_VERSION, true );
}

복제/assets/add-to-cart.jswoocommerce 플러그인 폴더에서 참조하는 폴더에 추가합니다.load_woo_scripts. 그 후 다음 항목을 추가합니다.var date = {스테이트먼트(21행)

// =========================================================================
// ADD PRODUCT ADD-ON FIELDS TO SUBMISSION (to allow from product archive)
// Store name and value of fields in object.
var addonfields = {}; 
$(this).parent().find(".after-shop-loop-item-title :input").each(function() { 
    addonfields[this.name] = $(this).val(); 
}); 

// Merge new fields and existing data
data = $.extend(data, addonfields);

// Testing: final value of data
console.log( data );
// =========================================================================

이 명령어를 통해 모든 입력 필드의 이름과 값이 추가됩니다..after-shop-loop-item-titlediv. 이 div/class를 테마에 추가했습니다.woocommerce/content-product.php★★★★★★★★★★★★★★★★★★:

<?php do_action( 'woocommerce_before_shop_loop_item' ); ?>
<h2><?php the_title(); ?></h2>
<div itemprop="description">
    <?php the_content(); ?>
</div>

<div class="after-shop-loop-item-title">
    <?php
        /**
         * woocommerce_after_shop_loop_item_title hook
         *
         * @hooked woocommerce_template_loop_rating - 5
         * @hooked woocommerce_template_loop_price - 10
         */
        do_action( 'woocommerce_after_shop_loop_item_title' );
    ?>  
</div>

<?php do_action( 'woocommerce_after_shop_loop_item' ); ?>

내 경우 텍스트 영역과 텍스트 입력만 사용합니다.어느 쪽도 가격은 변하지 않습니다.확장 기능을 보다 고급으로 사용할 경우 작업이 더 필요할 수 있습니다.

앞으로 WooCommerce에서 더 쉽게...

코드에 액세스하지 않고서는, 정확한 카피 페이스트 솔루션을 제공하는 것은 불가능하지만, 접속되어 있는 기능과 같은 기능을 접속하는 것은 가능합니다.

이것을 단일 제품 페이지에 추가하는 후크는 다음과 같습니다.

add_action( 'woocommerce_single_product_summary', array($this, 'woocommerce_product_add_ons_something'));

이 액션을 acheive 템플릿에도 부가하려면 다음과 같은 작업을 수행할 수 있습니다.

add_action( 'woocommerce_after_shop_loop_item_title', array('WC_Product_Add_On', 'woocommerce_product_add_ons_something')); 

WC_Product_Add_On는 plguin의 클래스 이름으로 액션에 함수/기능이 있는 클래스에 일치하도록 변경해야 합니다.을 참조해 주세요.php 파일을 사용합니다.

효과가 있는지 보자.그렇지 않다면, 더 많은 정보를 주시면 답변을 확대할 수 있습니다.

「」를 하는 유저가 .woocommerce product addons을 사용하다

$custom_field = get_post_meta( $product_id, '_product_addons', false );

foreach( $custom_field as $field => $value) { 
    foreach( $value as $val => $v) {         
        echo $v["name"]; // or other field that you want!
    }            
}

맛있게 드세요!

언급URL : https://stackoverflow.com/questions/25577307/woocommerce-how-to-display-fields-from-the-product-add-ons-extension

반응형