現在私はWordPressにWooCommerceを使用しており、Variations Productにカスタムフィールドを追加しようとしています。いくつかの研究をした後、私はいくつかのコードを見つけてそれを修正しようとしました。
これは私のフルコードです: https://Gist.github.com/alphadc/da163cc95cfd1cede34a
add_action( 'woocommerce_product_after_variable_attributes', 'variable_fields', 10, 2 );
add_action( 'woocommerce_product_after_variable_attributes_js', 'variable_fields_js' );
add_action( 'woocommerce_process_product_meta_variable', 'save_variable_fields', 10, 1 );
add_action( 'woocommerce_process_product_meta_variable-subscription' , 'save_variable_fields' , 10 , 1 ) ;
function variable_fields( $loop, $variation_data ) {?>
<tr>
<td>
<?php
woocommerce_wp_textarea_input(
array(
'id' => '_weightdesc['.$loop.']',
'label' => __( 'Weight Description', 'woocommerce' ),
'placeholder' => '',
'description' => __( 'Enter the custom value here.', 'woocommerce' ),
'value' => $variation_data['_weightdesc'][0],
)
);
?>
</td>
</tr>
<?php }
function variable_fields_js()?>
<tr>
<td>
<?php
woocommerce_wp_textarea_input(
array(
'id' => '_weightdesc[ + loop + ]',
'label' => __( 'My Textarea', 'woocommerce' ),
'placeholder' => '',
'description' => __( 'Enter the custom value here.', 'woocommerce' ),
'value' => $variation_data['_weightdesc'][0],
)
);
?>
</td>
</tr>
<?php }
function save_variable_fields( $post_id ) {
if (isset( $_POST['variable_sku'] ) ) :
$variable_sku = $_POST['variable_sku'];
$variable_post_id = $_POST['variable_post_id'];
// Textarea
$_weightdesc = $_POST['_weightdesc'];
for ( $i = 0; $i < sizeof( $variable_sku ); $i++ ) :
$variation_id = (int) $variable_post_id[$i];
if ( isset( $_weightdesc[$i] ) ) {
update_post_meta( $variation_id, '_weightdesc', stripslashes( $_weightdesc[$i] ) );
}
endfor;
endif;
}
フィールドは私のバックエンドに表示されていますが、値を保存しようとしたとき、それは機能していません。私もそれを修正しようとしましたが、まだうまくいきません。
私はこれの1つから来た複数の情報源からこのコードを見つけました: http://www.remicorson.com/woocommerce-custom-fields-for-variations/#comment-14159
これはWooCommerceの更新によるものだと思います(私は2.3.5を使用しています)。
誰かが私を助けてもらえますか?
さて、上のリンク上の答え(私は古いコードを手に入れ、答えに役立つ人々がいます)に基づいて、私は私のウェブサイトのための修正コードを入れました。私はそれを試してみました、そしてそれは魅力のように働いています。
変化する:
add_action( 'woocommerce_product_after_variable_attributes', 'variable_fields', 10, 2 );
に:
add_action( 'woocommerce_variation_options', 'variable_fields', 10, 3 );
そして変更します。
'value' => $variation_data['_weightdesc'][0],
に:
'value' => get_post_meta($variation->ID, '_weightdesc', true)
私はこの記事が古くなっているのを知っています、しかしこの質問を更新し続けるために
woocommerce_process_product_meta_variable
は機能しなくなり、woocommerce_save_product_variation
に変更する必要があります
そう、
変化する:
add_action( 'woocommerce_process_product_meta_variable', 'save_variable_fields', 10, 1 );
に:
add_action( 'woocommerce_save_product_variation', 'save_variable_fields', 10, 1 );
function variation_settings_fields( $loop, $variation_data, $variation ) {
// Text Field
woocommerce_wp_text_input(
array(
'id' => '_text_field[' . $variation->ID . ']',
'label' => __( 'My Text Field', 'woocommerce' ),
'placeholder' => '',
'desc_tip' => 'true',
'description' => __( 'Enter the custom value here.', 'woocommerce' ),
'value' => get_post_meta( $variation->ID, '_text_field', true )
)
);
}
add_action( 'woocommerce_product_after_variable_attributes', 'variation_settings_fields', 10, 3 );
function save_variation_settings_fields( $post_id ) {
// Text Field
$text_field = $_POST['_text_field'][ $post_id ];
if ( ! empty( $text_field ) ) {
update_post_meta( $post_id, '_text_field', esc_attr( $text_field ) );
}
}