web-dev-qa-db-fra.com

Enregistrer les champs personnalisés pour le produit Variations

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?

2
Irwan

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)
4
Irwan

Je sais que ce post est vieux, mais pour garder cette question à jour:

À partir de WooCommerce 2.4.4

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 ) );
    }
}
0
Unicco