Atributos de producto y metadatos específicos de eco en el carrito de WooCommerce

5 minutos de lectura

avatar de usuario
steven wright

Actualización (relacionada con los comentarios del autor):

Me gustaría personalizar WooCommerce cart.php para mostrar algunos metadatos que funcionan bien en la página del producto usando Complemento premium Essential Grid.

Me gustaría mostrar algunos campos de atributos del producto y también algunos metacampos personalizados que he creado con el creador de metacampos de Cuadrícula esencial enchufar.

Para probar, estoy usando 'Height' atributo (entonces 'pa_height') y el campo personalizado 'Age' que babosa es 'eg-age-cal'.

Actualmente, he intentado usar lo siguiente:

<?php echo get_post_meta($product_id, 'pa_height', true );?>

Y también:

<?php echo get_post_meta($product_id, 'eg-age-cal', true );?>

Pero estos no parecen funcionar.

He logrado que el código funcione usando:

<?php echo get_post_meta($product_id, '_regular_price', true );?>

Entonces sé que el código está funcionando.

Solo necesito ayuda para averiguar cómo puedo obtener los valores de estos atributos personalizados y campos personalizados.

Gracias.

avatar de usuario
LoicTheAztec

Actualizar (compatibilidad con WC 3+)

Después de sus explicaciones en su comentario a continuación, descubro que está usando Complemento premium Essential Grid (un complemento comercial) para crear algunos campos y atributos personalizados relacionados con sus productos de wooCommerce.

En este punto, no puedo ayudarporque nunca antes había usado este complemento y no sé dónde se almacenan los datos dentro de este complemento, en la base de datos.

Creo que no puede usar las funciones habituales de WordPress/WooCommerce para obtener estos datos, y esa es la razón por la que no obtendrá ningún dato usando get_post_meta() como siempre…

La mejor manera de recibir ayuda es:

– para buscar/explorar su base de datos para esos datos de campos personalizados.
– para buscar/preguntar Cuadrícula esencial los autores de complementos admiten subprocesos.


Mi respuesta original:

Para atributos definidos en sus productosusando get_post_meta() funcionar con el $product_id variable, debe usarla de esta manera para obtener los datos que desea (esta es una matriz de valores):

// getting the defined product attributes
$product_attr = get_post_meta( $product_id, '_product_attributes' );

// displaying the array of values (just to test and to see output)
echo var_dump( $product_attr );

También puede utilizar la función get_attributes() (más recomendado)Por aquí:

// Creating an object instance of the product
$_product = new WC_Product( $product_id );

// getting the defined product attributes
$product_attr = $_product->get_attributes();

// displaying the array of values (just to test and to see output)
echo var_dump( $product_attr );

Todo el código está probado y funcionando.

AHORA LOS DATOS DEL CARRITO ESTÁN ESTABLECIDOS EN COOKIES Y SESIONES y tendrás que usar WC()->cart sintaxis para obtener datos del carrito y artículos

Entonces puede usar este tipo de código para obtener los artículos (productos) en el carrito:

foreach ( WC()->cart->get_cart() as $cart_item ) {
    $product = $cart_item['data'];
    if(!empty($product)){

        // getting the defined product attributes
        $product_attr = $_product->get_attributes();

        // displaying the attributes array of values (just to test and to see output)
        echo var_dump( $product_attr ) . '<br>';
    }
}

Esto mostrará la matriz de atributos de valores para cada producto en el CARRITO.


Una solución Residencia en este hilousando wc_get_product_terms() dentro del mismo fragmento de código para obtener su atributo:

foreach ( WC()->cart->get_cart() as $cart_item ) {
    $product = $cart_item['data'];
    if(!empty($product)){

        // compatibility with WC +3
        $product_id = method_exists( $product, 'get_id' ) ? $product->get_id() : $product->id;

        // Getting "height" product attribute
        $myAttribute = array_shift( wc_get_product_terms( $product_id, 'pa_height', array( 'fields' => 'names' ) ) );
        echo $myAttribute . '<br>';
    }
}

Referencias:

  • ¡Increíble, gracias! Revisaré este código ahora y veré si es lo que necesito :). Disculpas por mi respuesta tardía, acabo de volver a iniciar sesión

    –Steven Wright

    8 de agosto de 2016 a las 9:41

  • @StevenWright No hay problema. Si pudiera decirme cómo obtiene este campo personalizado y cómo lo guarda en la base de datos… Gracias.

    – LoicTheAztec

    8 de agosto de 2016 a las 9:44

  • Lo siento, estoy un poco confundido con su código anterior (solo soy un principiante de PHP): agregué los fragmentos de código que proporcionó, sin embargo, ambos var_dumps están generando exactamente las mismas matrices, sin valores reales para los campos (por ejemplo, altura siendo 123, por ejemplo). Con el campo personalizado, terminamos teniendo que crearlo con el complemento ‘Essential Grid’ y usar su creador de metacampo para que funcionara bien con su complemento. Gracias por su ayuda hasta ahora 🙂

    –Steven Wright

    8 de agosto de 2016 a las 10:08

  • @StevenWright actualizó su pregunta y mi responder… Como está utilizando un complemento comercial, será muy difícil para usted obtener ayuda aquí, porque solo unas pocas personas tienen y usan este complemento comercial. Vea mi respuesta actualizada para soluciones.

    – LoicTheAztec

    08/08/2016 a las 20:07


  • Mismo problema con wc_get_product_terms() y atributos personalizados sin complemento comercial. Algunos productos con valor de atributo separado por comas devuelven un valor vacío. $product->get_attributes() y el bucle foreach funciona. Es un error en esta función.

    – jMike

    8 dic 2016 a las 17:44

¿Ha sido útil esta solución?