2017-11-24 2 views
1

현재 WooCommerce 기능이있는 WordPress 웹 사이트에서 작업하고 있습니다.WooCommerce의 장바구니 항목에 대한 사용자 정의 필드 값을 동적으로 가져옵니다.

각 제품 페이지에는 사이트 방문자가 제품에 적용 할 텍스트를 입력 할 수있는 사용자 지정 필드가 있습니다. 요금은 '편지 당 입력'기준으로 적용됩니다. functions.php 파일로, 나는 다음 코드를 삽입 한

는 제품의 전체 비용 해결하려면 (제품 가격 + 사용자 정의 문자 입력) :

<?php 
    function calculate_engrave_text_fee($cart_object) { 
     foreach ($cart_object->cart_contents as $key => $value) { 
      if(isset($value["engrave_text"])) { 
       // Quantity of characters entered into Custom Text Field: 
       $chars = strlen($value["engrave_text"]); 
       // Characters Entered Multiplied by Cost of Each Letter: 
       $engrave_text_fee = $chars * 3; //Need to dynamically call this. 
       $orgPrice = floatval($value['data']->price); 
       $value['data']->set_price($orgPrice + $engrave_text_fee); 
      } 
     } 
    } 
    add_action('woocommerce_before_calculate_totals', 'calculate_engrave_text_fee', 99); 
?> 

위의 코드는 절대적으로 잘 작동; 한 가지 예외는있다.

각 편지의 비용은 제품마다 다르므로 $engrave_text_fee = $chars * 3;과 같이 정적 항목이 있으면 이상적이지 않습니다. 또는 WooCommerce 제품 대시 보드에 사용자 정의 필드를 작성하여 사이트 관리자가 각 제품의 개별 사용자 정의 레터링 가격을 입력 할 수 있습니다.

문제점

동적 WooCommerce 제품 대시 보드에서 사용자 정의 필드 항목을 전화 나 교체 시도, 위의 수학에이를 배치 : $engrave_text_fee = $chars * 3;로 :

$engrave_text_fee = $chars * <?php global $post; echo get_post_meta($post->ID,'_pricing_engrave_text_option',true)?>; 

불행하게도,이 웹 사이트를 오프라인으로 보냅니다. 코딩 구문에 문제가 있다고 가정 할 수 있습니다!? 아무도 여기서 내가 잘못 될 수 있다는 것을 지적 할 수 있습니까?

답변

1

올바른 동적 코드는 (당신은 몇 가지 오류 및 오래된 코드를 가지고)해야 더 같이해야한다 또는 테마) 또는 모든 플러그인 파일에서.

이 코드가 올바르게 작동합니다.

+0

코드 제공 노력에 감사드립니다. 이유는 모르겠지만이 코드를 시도하면 제품을 장바구니에 추가하려고하면 페이지가 비어있게됩니다. 내가 알아낼 수 있는지 알아볼거야. – Craig

+1

@craig 미안 $ cart_item에있는 일부 $ 값의 이름을 바꾸는 것을 잊어 버렸습니다 ... 지금 작동해야합니다 ... 다시 시도하십시오. – LoicTheAztec

0

php 태그 <?php이 이상하게 보입니다.

add_action('woocommerce_before_calculate_totals', 'calculate_engrave_text_fee', 99, 1); 
function calculate_engrave_text_fee($cart_object) { 
    foreach ($cart_object->get_cart() as $cart_item) { 
     // Checking that we got the engrave text in cart object 
     if(! empty($cart_item["engrave_text"])) { 

      // Quantity of characters entered into Custom Text Field: 
      $lenght = strlen($cart_item["engrave_text"]); 

      // get the engrave pricing for this product 
      $pricing_engrave = get_post_meta($cart_item['product_id'], '_pricing_engrave_text_option', true); 

      // Characters Entered Multiplied by Cost of Each Letter: 
      $engrave_text_fee = $lenght * $pricing_engrave; 

      // get product price 
      $price = floatval($cart_item['data']->get_price()); 

      // set new price 
      $cart_item['data']->set_price($price + $engrave_text_fee); 
     } 
    } 
} 

코드 활성 자식 테마의 function.php 파일에 간다 (: 그것은이

global $post;  
$engrave_text_fee = $chars * get_post_meta($post->ID,'_pricing_engrave_text_option',true); 
+0

답장을 보내 주셔서 감사합니다. 나는 이것을 시도하고 웹 사이트가 온라인으로 돌아 오는 동안 WooCommerce 내의 Custom Field에서 관련 번호를 입력하지 않는 것 같습니다. 제안 된 코드는 번호로만 전화를 걸습니까, 아니면 인용 부호 등의 번호로 전화를합니까? – Craig

+0

인용 부호가 없습니다. 결과는 숫자 여야합니다. 게시 메타 값이 올바르게 설정되어 있는지 확인해야합니다. 나는 그것이 당신이 무엇을 반환 볼 것을 권 해드립니다. 그냥'echo $ chars * get_post_meta ($ post-> ID, '_ pricing_engrave_text_option', true)'어디서 볼 수 있습니까? – musashii

관련 문제