site plugin metadescription keywords how description php wordpress woocommerce metadata orders

php - plugin - seo keywords wordpress



AƱadir meta extra para pedidos en Woocommerce (4)

Estoy creando un complemento personalizado para mi sitio web.

En alguna parte de este complemento necesito almacenar meta adicional en wp_postmeta para cada orden.

Agregué esto en la clase de mi plugin:

`add_action (''woocommerce_before_checkout_process'', array( &$this, ''add_item_meta'', 10, 2) );`

Y esta es la función add_item_meta() :

function add_item_meta( $item_id, $values ) { wc_add_order_item_meta($item_id, ''_has_event'', ''yes'' ); }

Esta función no está completa, pero no sucede nada con estos códigos; Creo que necesito usar otro gancho pero no puedo encontrar uno adecuado.

¿Alguien sabe algo de esto?

También tengo otro problema con $item_id : esta es una variable global de woocommerce pero no puedo verla en mi complemento.

Quiero decir que no tengo acceso a esta variable desde mi complemento o algo así.


La respuesta es: debería usar woocommerce_checkout_update_order_meta para add_action y también debería usar update_post_meta() para agregar meta adicional a mi pedido

function add_item_meta( $order_id ) { //global $woocommerce; update_post_meta( $order_id, ''_has_event'', ''yes'' ); }


Sobre la base de la respuesta de Mo Saeedi, creo que este fragmento está más en línea con el nuevo enfoque CRUD introducido por WooCommerce 3.0:

add_action(''woocommerce_checkout_update_order_meta'',function( $order_id, $posted ) { $order = wc_get_order( $order_id ); $order->update_meta_data( ''my_custom_meta_key'', ''my data'' ); $order->save(); } , 10, 2);

Vea también estos hilos en los foros de WordPress:


El camino del 2018:

Basado en la respuesta Guido WP , puede usar el gancho de acción woocommerce_checkout_create_order en un código de versión más ligero y efectivo (utilizando los métodos WC 3+ CRUD ) :

add_action(''woocommerce_checkout_create_order'', ''before_checkout_create_order'', 20, 2); function before_checkout_create_order( $order, $data ) { $order->update_meta_data( ''_custom_meta_key'', ''value'' ); }

El código va en el archivo function.php de su tema secundario activo (o tema activo).

Probado y funciona en WooCommerce 3+ (solo) .

ALGUNAS EXPLICACIONES:

El gancho de acción woocommerce_checkout_create_order es solo un paso antes de guardar los datos del pedido. Vea a continuación en un extracto del método WC_Checkout create_order() (con ambos ganchos):

/** * Action hook to adjust order before save. * @since 3.0.0 */ do_action( ''woocommerce_checkout_create_order'', $order, $data ); // Save the order. $order_id = $order->save(); do_action( ''woocommerce_checkout_update_order_meta'', $order_id, $data ); return $order_id;

¿Por qué usar woocommerce_checkout_create_order en woocommerce_checkout_create_order lugar? :

  • Porque no necesita usar $order = wc_get_order( $order_id ); como ya tienes $order como argumento en la función enganchada.
  • No necesita usar $order->save(); ya que esto se hará justo después de todos modos (ver el código fuente)
  • También woocommerce_checkout_create_order se ha lanzado en la versión 3 de WooCommerce y también lo es para ella.

Así que esto solo funciona con una sola línea de código dentro de la función.


La forma 2016:

add_action(''woocommerce_checkout_update_order_meta'',function( $order_id, $posted ) { update_post_meta( $order_id, ''my_custom_meta_key'', ''my data'' ); } , 10, 2);

  • $order_id es el ID del pedido, que se almacena como un tipo de publicación personalizada
  • $posted es todos los datos de $_POST