Actuellement, j'utilise WooCommerce pour WordPress et j'essaie d'ajouter des champs personnalisés pour le produit Variations. Après quelques recherches, j'ai trouvé du code et essayé de le modifier.
Ceci est mon code complet: 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;
}
Le champ est affiché sur mon backend, mais lorsque j'ai essayé de sauvegarder la valeur, cela ne fonctionnait pas. J'ai essayé de le modifier aussi, mais ne fonctionne toujours pas.
J'ai trouvé ce code provenant de plusieurs sources dont l'une venait de: http://www.remicorson.com/woocommerce-custom-fields-for-variations/#comment-14159
Je pense que c'est à cause de la mise à jour de WooCommerce (j'utilise la 2.3.5).
Quelqu'un peut m'aider s'il vous plaît?
D'accord, en fonction des réponses sur le lien ci-dessus (où j'ai obtenu l'ancien code et où certaines personnes peuvent aider), j'ai mis le code de modification pour mon site Web. Je l'ai essayé et ça marche comme un charme.
Changement:
add_action( 'woocommerce_product_after_variable_attributes', 'variable_fields', 10, 2 );
Dans:
add_action( 'woocommerce_variation_options', 'variable_fields', 10, 3 );
Et changer:
'value' => $variation_data['_weightdesc'][0],
Dans:
'value' => get_post_meta($variation->ID, '_weightdesc', true)
Je sais que ce post est vieux, mais pour garder cette question à jour:
woocommerce_process_product_meta_variable
ne fonctionne plus et doit être remplacé par woocommerce_save_product_variation
Alors,
Changement:
add_action( 'woocommerce_process_product_meta_variable', 'save_variable_fields', 10, 1 );
Dans:
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 ) );
}
}