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
}
}