webentwicklung-frage-antwort-db.com.de

Benutzerdefinierte Felder für Variationsprodukt speichern

Derzeit verwende ich WooCommerce für WordPress und versuche, benutzerdefinierte Felder für Variations Product hinzuzufügen. Nach einigen Recherchen habe ich einen Code gefunden und versucht, ihn zu ändern.

Dies ist mein vollständiger Code: 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;
}

Das Feld wird in meinem Backend angezeigt, aber als ich versuchte, den Wert zu speichern, funktioniert es nicht. Ich habe versucht, es zu ändern, aber immer noch nicht funktioniert.

Ich habe diesen Code aus mehreren Quellen gefunden, von denen einer stammt: http://www.remicorson.com/woocommerce-custom-fields-for-variations/#comment-14159

Ich denke, das liegt am Update von WooCommerce (ich benutze 2.3.5).

Kann mir bitte jemand helfen?

2
Irwan

Okay, basierend auf den Antworten auf den obigen Link (wo ich den alten Code habe und es gibt Leute, die bei der Beantwortung helfen), habe ich den Änderungscode für meine Website eingegeben. Ich habe es versucht und es funktioniert wie Charme.

Veränderung:

add_action( 'woocommerce_product_after_variable_attributes', 'variable_fields', 10, 2 );

In:

add_action( 'woocommerce_variation_options', 'variable_fields', 10, 3 );

Und ändern Sie:

'value'       => $variation_data['_weightdesc'][0],

In:

'value' => get_post_meta($variation->ID, '_weightdesc', true)
4
Irwan

Ich weiß, dass dieser Beitrag alt ist, aber um diese Frage auf dem neuesten Stand zu halten:

Ab WooCommerce 2.4.4

woocommerce_process_product_meta_variable funktioniert nicht mehr und muss in woocommerce_save_product_variation geändert werden

So,

Veränderung:

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

In:

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