2017-04-26 5 views
-1

꽤 많이 있습니다. php-fu는 여전히 약해서 woocommerce에는 아직 익숙하지 않습니다.Woocommerce - 체크 아웃 할 때 두 개의 product_ids 중 하나가 장바구니에있는 경우 양식 필드를 추가하고 div 표시/숨기기

체크 아웃 페이지의 장바구니에있는 두 개의 특정 제품 ID 중 하나를 확인하는 스크립트를 만들어야하고, 거기에 "페이팔 이메일 주소"텍스트 필드와 "수신 뉴스 레터"를 추가해야합니다. 확인란을 선택하고 div가있는 다른 양식으로 숨겨진 div와 함께 "form-shipping.php"템플릿으로 만든 div를 스왑합니다.

놀랍게도, 내 연구는 지금까지 합리적으로 공통적 인 필요성이있는 것으로 보이는 체크 아웃 페이지의 장바구니에서 일치하는 product_ids를 확인하는 데 많은 도움을주지 못했습니다. 나는이 점을 고려해 볼 때이 시점에서 큰 승리가 될 것입니다.

이 목표를 달성하기위한 제안, 지침 또는 단서는 크게 감사하겠습니다. 여기

https://wordimpress.com/create-conditional-checkout-fields-woocommerce/에서 적응을 시도, 내가 작업했던 코드 :

<?php 
add_action('woocommerce_before_checkout_billing_form', 'aym_custom_checkout_field'); 

function aym_custom_checkout_field($checkout) { 

    //Check if Product in Cart 
    $prod_in_cart_17563 = aym_is_conditional_product_in_cart_17563(17563); 
    $prod_in_cart_17558 = aym_is_conditional_product_in_cart_17558(17558); 

    if ($prod_in_cart_17563 === true || $prod_in_cart_17558 === true) { 


     //Prod is in cart so hide div 
     echo '<script type="text/javascript">$(".checkout_promo_content").css("display", "none")</script>'; 
     echo '<script type="text/javascript">$(".checkout_promo_aff_content").css("display", "block")</script>'; 

     //and add additional fields 
     echo '<div id="email_paypal"><h3>' . __('Paypal Email Address') . '</h3><p style="margin: 0 0 8px;">Please enter the email address you use for Paypal</p>'; 

     woocommerce_form_field('pp_email_textbox', array(
     'type' => 'text', 
     'class' => array('paypal-email form-row-wide'), 
     'label' => __('Paypal Email Address'), 
     ), $checkout->get_value('pp_email_textbox')); 


     echo '<h3>' . __('Ambassador Terms and Conditions') . '</h3><p style="margin: 0 0 8px;">Please accept the <a href="http://www.acceleratingyoungminds.com/ambassador-terms-conditions/">Ambassaor Terms and Conditions</a></p>'; 

     woocommerce_form_field('amb_terms_checkbox', array(
     'type' => 'checkbox', 
     'class' => array('amb_terms-checkbox form-row-wide'), 
     'label' => __('I accept Ambassador terms and Conditions'), 
     ), $checkout->get_value('amb_terms_checkbox')); 


     echo '<h3>' . __('Subscribe for Ambassador Mailing List') . '</h3><p style="margin: 0 0 8px;">Would you like to subscribe for welcome emails and important information</p>'; 

     woocommerce_form_field('amb_sub_checkbox', array(
     'type' => 'checkbox', 
     'class' => array('amb_sub_checkbox form-row-wide'), 
     'label' => __('I would like to subscribe to the Ambassador Newsletter'), 
     ), $checkout->get_value('amb_sub_checkbox')); 

     echo '</div>'; 
    } 

} 


?> 
+2

하십시오 "__write/디버그 - 내 - code__", "__recommend/검색 무언가를 위해 me__", "__tutorial__"요청과 "__low-effort__", "__unclear__", "__opinion-based__" , "** 비 프로그래밍 관련 **"질문은 [스택 오버플로에 대한 주제 외] (http://stackoverflow.com/help/on-topic)입니다. 좋은 질문 대신, [질문하는 방법] (http://stackoverflow.com/help/how-to-ask)에 설명 된대로 ** 연구 노력 **, ** 문제에 대한 명확한 설명 ** 및 [Minimal, Complete, and Verifiable example] (http://stackoverflow.com/help/mcve)을 포함하십시오. –

+1

woocommerce의 어떤 버전입니까? – LoicTheAztec

+0

버전 2.6.14, 물론 우리는 곧 업그레이드해야 할 것입니다. 3.0을 수용 할 수 있도록 업그레이드되지 않은 프리미엄 테마를 사용합니다. –

답변

0

첫 번째 신인 이동, 심지어 두 제품 (aym_is_conditional_product_in_cart_17563 등)에 대한 함수를 정의하는 데 실패했습니다. 둘째, 나는 Wordpress에 대해 JQuery를 잘못 호출했다. 셋째, add_action에 잘못된 훅을 사용했습니다. 넷째, 처음에이 모든 것을 조기에 게시했습니다. 나는 가족에게 수치심을 가져왔다. 다음 코드는 예상대로 작동합니다. 다행히도 비슷한 문제를 가진 사람을 돕기를 바랍니다.

//AMBASSADOR CUSTOM CHECKOUT FIELDS, CONTENT 
add_action('woocommerce_after_checkout_billing_form', 'aym_custom_checkout_field'); 

function aym_custom_checkout_field($checkout) { 

    //Check if Product in Cart 
    $prod_in_cart_17563 = aym_is_conditional_product_in_cart_17563(17563); 
    $prod_in_cart_17558 = aym_is_conditional_product_in_cart_17558(17558); 

    if ($prod_in_cart_17563 === true || $prod_in_cart_17558 === true) { 


     //Prod is in cart so hide div 
     echo '<script type="text/javascript"> 

     jQuery(function($) { 
      $(window).load(function(){ 
       console.log("hidden!"); 
       $(".check-promo-content").css("display", "none"); 
      }); 
     }); 

     </script>'; 

     echo '<script type="text/javascript"> 
     jQuery(function($) { 
      console.log("shown!"); 
      $(".checkout_promo_aff_content").css("display", "block"); 
     });</script>'; 

     //and add additional fields 
     echo '<div id="email_paypal"><h3>' . __('Paypal Email Address') . '</h3><p style="margin: 0 0 8px;">Please enter the email address you use for Paypal</p>'; 

     woocommerce_form_field('pp_email_textbox', array(
     'type' => 'text', 
     'class' => array('paypal-email form-row-wide'), 
     'label' => __('Paypal Email Address'), 
     ), $checkout->get_value('pp_email_textbox')); 


     echo '<h3>' . __('Ambassador Terms and Conditions') . '</h3><p style="margin: 0 0 8px;">Please accept the <a href="http://www.acceleratingyoungminds.com/ambassador-terms-conditions/">Ambassador Terms and Conditions</a></p>'; 

     woocommerce_form_field('amb_terms_checkbox', array(
     'type' => 'checkbox', 
     'class' => array('amb_terms-checkbox form-row-wide'), 
     'label' => __('I accept Ambassador terms and Conditions'), 
     ), $checkout->get_value('amb_terms_checkbox')); 


     echo '<h3>' . __('Subscribe for Ambassador Mailing List') . '</h3><p style="margin: 0 0 8px;">Would you like to subscribe for welcome emails and important information?</p>'; 

     woocommerce_form_field('amb_sub_checkbox', array(
     'type' => 'checkbox', 
     'class' => array('amb_sub_checkbox form-row-wide'), 
     'label' => __('I would like to subscribe to the Ambassador Newsletter'), 
     ), $checkout->get_value('amb_sub_checkbox')); 

     echo '</div>'; 
    } 

} 
//TEAM LEADER BUNDLE 
function aym_is_conditional_product_in_cart_17558($product_id) { 
    //Check to see if user has product in cart 
    global $woocommerce; 

    //flag no product in cart 
    $prod_in_cart_17558 = false; 

    foreach ($woocommerce->cart->get_cart() as $cart_item_key => $values) { 
     $_product = $values['data']; 

     if ($_product->id === $product_id) { 
      //product is in cart! 
      $prod_in_cart_17558 = true; 

     } 
    } 

    return $prod_in_cart_17558; 
} 
//AMBSSADOR BUNDLE 
function aym_is_conditional_product_in_cart_17563($product_id) { 
//Check to see if user has product in cart 
global $woocommerce; 

//flag no product in cart 
$prod_in_cart_17563 = false; 

foreach ($woocommerce->cart->get_cart() as $cart_item_key => $values) { 
    $_product = $values['data']; 

    if ($_product->id === $product_id) { 
     //product is in cart! 
     $prod_in_cart_17563 = true; 

    } 
} 

return $prod_in_cart_17563;