Soporte » Plugins y Hacks » WooCommerce » Obtener $product_id para hooks de WC

  • Resuelto javisin

    (@javisin)


    Hola a todos,

    Estoy tratando de incluir un campo de personalización para un producto de Woocommerce siguiendo el código de la siguiente página web de Business Bloomer: https://www.businessbloomer.com/woocommerce-product-add-ons-without-plugin/

    Estos campos de personalización son diferentes en función del producto, y para ello dentro de las funciones de cada hook establezco condicionales para poner código diferente según el $product_id. Para los primeros casos tengo claro cómo obtener el ID de producto. Pongo un ejemplo del primero de ellos (no copio todo por no alargar este mensaje ya que está en la web que he puesto arriba):

    add_action( 'woocommerce_before_add_to_cart_button', 'bbloomer_product_add_on', 9 );
     
    function bbloomer_product_add_on() {
    
       global $product;
       if ( $product->get_id() == 123 ) {
    
        $value = isset( $_POST['custom_text_add_on'] ) ? sanitize_text_field( $_POST['custom_text_add_on'] ) : '';
        echo '<div><label>Custom Text Add-On <abbr class="required" title="required">*</abbr></label><p><input name="custom_text_add_on" value="' . $value . '"></p></div>';
    }
    }

    Pero tengo dudas de cómo obtener el ID de producto para los siguientes hooks, ya que la forma anterior (global $product; if ( $product->get_id() == 123) ) no funciona: ‘woocommerce_get_item_data’, ‘woocommerce_add_order_item_meta’, ‘woocommerce_order_item_product’ y ‘woocommerce_email_order_meta_fields’.

    He probado códigos como los siguientes:

    $product_id = $cart_item['product_id'];

    o

    $items = $order->get_items();
    foreach ( $items as $item ) {
    $product_id = $item->get_product_id();

    Pero aparecen errores. Agradecería si alguien pudiera darme una pista sobre cómo acceder al ID de producto en estos casos.

    Aprovecho para realizar dos preguntas más relacionadas con esta cuestión:
    – ¿La misma variable $product_id vale para productos simples y variables?
    – Buscando la solución por internet he encontrado en algunas webs que el hook ‘woocommerce_add_order_item_meta’ se encuentra actualmente fuera de uso y es mejor sustituirlo por ‘woocommerce_checkout_create_order_line_item’. Sin embargo, en otros sitios dicen que el primero sigue funcionando y no es necesario cambiarlo por el segundo. ¿Cuál es la mejor opción?

    No sé si tiene relevancia, pero el tema que estoy utilizando es Astra.

    Muchas gracias por su ayuda.
    Javi

Viendo 3 respuestas - de la 1 a la 3 (de un total de 3)
Viendo 3 respuestas - de la 1 a la 3 (de un total de 3)
  • Debes estar registrado para responder a este debate.