Obtener el peso del producto de WordPress

4 minutos de lectura

avatar de usuario
Ensayador

El siguiente código se usa para obtener datos sobre productos de la categoría “libros” en mi sitio web de WordPress usando Woocommerce.

<?php
 $args = array( 'post_type' => 'product', 'posts_per_page' => 200, 'product_cat' => 'books');
       $loop = new WP_Query( $args );


    $send_array = array();
       while ( $loop->have_posts() ) : $loop->the_post(); 
        global $product; 

    $send_array[] = array(

        'id' => get_the_ID(),
        'title' => get_the_title(),
        'content' => get_the_content(),
        'regular_price' => get_post_meta( get_the_ID(), '_regular_price', true),
        'sale_price'=> get_post_meta( get_the_ID(), '_sale_price', true),
        'weight' => woocommerce_get_product_terms($product->id, 'weight', 'names')

    );

     endwhile; 

     wp_reset_query(); 
        ob_clean();
        echo json_encode($send_array);
        exit();

    ?>

Esto funciona bien y devuelve los datos correctamente excepto por el weight atributo.

Este es un atributo personalizado establecido en mi sitio web usando Woocommerce. En mi base de datos, el atributo de peso aparece en el wp_woocommerce_attribute_taxonomies mesa. Esta tabla tiene los campos attribute_id, attribute_name, attribute_label etc.

El código que usé arriba para obtener el weight el valor del producto no funciona.

yo también probé 'weight' => get_post_meta( get_the_ID(), '_weight', true)pero aparece como una cadena vacía (peso: “”) a pesar de que ese producto tiene un valor Peso en el sitio web.

¿Cómo obtengo el peso de cada producto y lo agrego a la matriz de la clave? weight como he intentado anteriormente.

He estado investigando un poco y este parecía ser el elemento para trabajar. ¿Qué estoy haciendo mal?

¿Cómo puedo solucionar esto?

avatar de usuario
Taras Kyriluk

global $product;    
$product->get_weight();

  • Gracias, este método hizo mi día más simple.

    – Gendrith

    31 de agosto de 2018 a las 1:52

  • Responde a la pregunta: hace que esta sea una respuesta de alta calidad.

    – Jon

    7 ago. 2019 a las 12:40

avatar de usuario
pixelado

La función de Woo Commerce ‘woocommerce_get_product_terms’ devuelve una matriz. No estoy muy familiarizado con los resultados de esa función de Woo Commerce, pero suponiendo que no devuelve una matriz multidimensional, debe asignar los términos a una variable fuera de su matriz $send_array e intentar devolver el primer elemento en la matriz

$weight = woocommerce_get_product_terms($product->id, 'pa_weight', 'names');

Luego, su matriz usaría la variable $ peso así:

$send_array[] = array(

    'id' => get_the_ID(),
    'title' => get_the_title(),
    'content' => get_the_content(),
    'regular_price' => get_post_meta( get_the_ID(), '_regular_price', true),
    'sale_price'=> get_post_meta( get_the_ID(), '_sale_price', true),
    'weight' => $weight[0]

);

Si eso no funciona, debe hacer un var_dump ($ peso) de la variable para ver cómo Woo Commerce devuelve el resultado de la función. A partir de esa salida, debería poder determinar el índice adecuado para usar para obtener el resultado que busca.

  • Intenté esto, pero luego el valor de la clave weight apareció como “nulo”, y cuando uso el var_dump($weight), la página aparece en blanco. Nada devuelto.

    – Probador

    10/02/2014 a las 19:25

  • Debe anteponer sus claves de atributos con ‘pa_’, por lo que el peso debe ser ‘pa_weight’. Configuré un atributo para el peso para probarlo y eso me devuelve una matriz de pesos.

    – pixelate

    10 de febrero de 2014 a las 20:28

  • ¿Quiere decir agregar el prefacio “pa_” en el panel de control de WordPress? ¿O simplemente tengo que cambiar a “pa_weight” en el código anterior, es decir, $weight = woocommerce_get_product_terms($product->id, 'pa_weight', 'names');

    – Probador

    10 de febrero de 2014 a las 20:52


  • No este: woocommerce_get_product_terms($product->id, 'weight', 'names') se convierte en esto: woocommerce_get_product_terms($product->id, 'pa_weight', 'names'). Woo Commerce antepone los atributos del producto con ‘pa_’ cuando se guardan en la base de datos. He editado mi respuesta anterior con la adición.

    – pixelate

    10/02/2014 a las 20:54


  • Intenté eso pero sigue siendo el mismo resultado. El valor aparece como nulo

    – Probador

    10 de febrero de 2014 a las 20:56

Esto funcionó para mí para obtener el peso de un producto en particular.

$item_weight=wp_get_post_terms($post->ID, 'pa_weight', array("fields" => "names"));

$send_array[] = array(

    'id' => get_the_ID(),
    'title' => get_the_title(),
    'content' => get_the_content(),
    'regular_price' => get_post_meta( get_the_ID(), '_regular_price', true),
    'sale_price'=> get_post_meta( get_the_ID(), '_sale_price', true),
    'weight' => $item_weight[0]

);

Esto miró una publicación definida en el ciclo para devolver los valores de atributo para pa_weight.

avatar de usuario
BELLO KOLADE

Mira este también.

$items = WC()->cart->get_cart();
$x = 0;
foreach($items as $item => $values) { 
    $_product2 = $values['data'];

    $getProductDetail = wc_get_product( $values['product_id'] );

    echo $getProductDetail->get_image(); // accepts 2 arguments ( size,      attr )

    $weight = $getProductDetail->product_attributes;
    echo 'Weight: '.$weight["weight"]["value"].'<br>';
}

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad