2016-12-02 7 views
0

私はWoocommerceのバリエーションにアフィリエイトリンクを追加しようとしています。アイデアは、各製品のバリエーションに固有のhttpリンク/ URL(アフィリエイトリンク)を持つことです。 Woocommerceバックエンドに入力できるリンク/ URL。顧客が[カートに追加]ボタンをクリックすると、新しいウェブページがロードされます(その商品の対応するURLに基​​づいて)Woocommerceの亜種へのアフィリエイトリンクの追加

ばらつきのない製品に容易に実現できます。しかし、バリエーションのある製品でも同じことを達成するためには、そのような機能はありません。

私はコードを実装しましたが、バックエンドにURLを入力して変更を保存しようとするたびに、リンクが消えて、自分のコードで何がうまくいかないのかわかりません。

// Display Fields 
add_action('woocommerce_product_after_variable_attributes', 'variable_fields', 10, 2); 
//JS to add fields for new variations 
add_action('woocommerce_product_after_variable_attributes_js', 'variable_fields_js'); 
// Save Fields 
add_action('woocommerce_process_product_meta_variable', 'variable_fields_process', 10, 1); 

function variable_fields($loop, $variation_data) { 
?> 
    <tr> 
     <td> 
      <div> 
        <label><?php _e('Affiliate URL', 'woocommerce'); ?></label> 
        <input type="text" size="5" name="my_affiliate_url[<?php echo $loop; ?>]" value="<?php echo $variation_data['_my_affiliate_url'][0]; ?>"/> 

      </div> 
     </td> 
    </tr> 
<?php 
} 

function variable_fields_js() { 
?> 
<tr> 
     <td> 
      <div> 
        <label><?php _e('My Custom Field', 'woocommerce'); ?></label> 
        <input type="text" size="5" name="my_affiliate_url[' + loop + ']" /> 
      </div> 
     </td> 
    </tr> 
<?php 
} 

function variable_fields_process($post_id) { 
    if (isset($_POST['variable_sku'])) : 
     $variable_sku = $_POST['variable_sku']; 
     $variable_post_id = $_POST['variable_post_id']; 
     $variable_custom_field = $_POST['my_affiliate_url']; 
     for ($i = 0; $i < sizeof($variable_sku); $i++) : 
      $variation_id = (int) $variable_post_id[$i]; 
      if (isset($variable_custom_field[$i])) { 
       update_post_meta($variation_id, '_my_affiliate_url', stripslashes($variable_custom_field[$i])); 
      } 
     endfor; 
    endif; 
} 

//front-end variations 
function woocommerce_variable_add_to_cart() { 
     global $product, $post; 
     $variations = $product->get_available_variations(); 
     foreach ($variations as $key => $value) { 
     ?> 
     <form action="<?php echo esc_url($product->add_to_cart_url()); ?>"method="post" enctype='multipart/form-data'> 
      <input type="hidden" name="variation_id" value="<?php echo $value['variation_id']?>" /> 
      <input type="hidden" name="product_id" value="<?php echo esc_attr($post->ID); ?>" /> 
      <?php 
      if(!empty($value['attributes'])){ 
       foreach ($value['attributes'] as $attr_key => $attr_value) { 
       ?> 
       <input type="hidden" name="<?php echo $attr_key?>" value="<?php echo $attr_value?>"> 
       <?php 
       } 
      } 
      ?> 
      <table> 
       <tbody> 
        <tr> 
         <td> 
          <b><?php echo implode('/', $value['attributes']);?></b> 
         </td> 
         <td> 
          <?php echo $value['price_html'];?> 
         </td> 
         <td> 
          <a class="single_add_to_cart_button button alt" target="_blank" href="<?php echo get_post_meta($value['variation_id'], '_my_affiliate_url', true); ?>" ><?php echo apply_filters('single_add_to_cart_text', __('Add to cart', 'woocommerce'), $product->product_type); ?></a> 
         </td> 
        </tr> 
       </tbody> 
      </table> 
     </form> 
     <?php 
     } 
} 

答えて

2

これはしばらくお待ちしております。しかし、将来誰かが私のように答えを探しに来る人。

置き換え:

add_action('woocommerce_process_product_meta_variable', 'variable_fields_process', 10, 1); 

で:

add_action('woocommerce_save_product_variation', 'variable_fields_process', 10, 2); 

の保存は2.4.4

WooCommerceのように変更変種
関連する問題