Mostrar elementos en orden, incluida la imagen WooCommerce

5 minutos de lectura

avatar de usuario
teo

Estoy tratando de mostrar los productos/artículos dentro de un pedido de WooCommerce usando el siguiente php, pero los artículos no se muestran.

El código que estoy usando es una adaptación de esto: obtener el nombre del artículo del carrito, la cantidad y todos los detalles woocommerce

Usar el código original de la pregunta anterior tampoco muestra nada en mi página.

Gracias por adelantado.

<?php  


        global $woocommerce;
        $items = $woocommerce->cart->get_cart();

        foreach($items as $item => $values) { 
        $_product = $values['data']->post;
        //product image
        $getProductDetail = wc_get_product( $values['product_id'] );
        echo '<tr><td>';
        echo $getProductDetail->get_image(); // accepts 2 arguments ( size, attr )
        echo '</td>';
        echo '<td>';
        echo '<p style="font-size:10pt;">'.$_product->post_title.'</p><td><p style="font-size:10pt;">x'. $values['quantity'] . '</p></td>'; 
        echo '</td></tr>';
        };
   ?>

El código de la página completa está aquí:

<?php
/*
Template Name: Store
*/
if (!is_user_logged_in() || !current_user_can('manage_options')) wp_die('This page is private.');


?>
  <!DOCTYPE HTML>
  <html>

  <head>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.2/jquery.min.js"></script>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>
      <?php _e('Store Queue'); ?>
    </title>

  </head>

  <body id="driverqueue">
    <header>
      <?php if (have_posts()) : while (have_posts()) : the_post(); ?>

        <h1 class="title"><?php the_title(); ?></h1>

        <?php the_content(); ?>

          <?php endwhile; endif; ?>
    </header>
    <section>
      <?php 

  global $woocommerce;


  $args = array(
    'post_type' => 'shop_order',
    'post_status' => 'wc-processing',
    'meta_key' => '_customer_user',
    'posts_per_page' => '-1'
  );
  $my_query = new WP_Query($args);

  $customer_orders = $my_query->posts;

  foreach ($customer_orders as $customer_order) {
   $order = new WC_Order();

   $order->populate($customer_order);
   $orderdata = (array) $order;

   // $orderdata Array will have Information. for e.g Shippin firstname, Lastname, Address ... and MUCH more.... Just enjoy!
  }




  $loop = new WP_Query( $args );

  while ( $loop->have_posts() ) : $loop->the_post();



    $order_id = $loop->post->ID;

    $order = new WC_Order($order_id);

    ?>







        <table class="ordertable" id="<?php echo $order_id; ?>">
          <tr>
            <td>
              <p>Order #
                <?php echo $order_id; ?> &mdash;
                  <time datetime="<?php the_time('c'); ?>">
                    <?php echo the_time('d/m/Y g:i:s A'); ?>
                  </time>
              </p>
            </td>
            <td>
              <?php echo $order->billing_first_name . ' ' . $order->billing_last_name ?>
            </td>
            <td>
              <table>
                <tr>

                  <?php  


            global $woocommerce;
            $items = $woocommerce->cart->get_cart();

            foreach($items as $item => $values) { 
            $_product = $values['data']->post;
            //product image
            $getProductDetail = wc_get_product( $values['product_id'] );
            echo '<tr><td>';
            echo $getProductDetail->get_image(); // accepts 2 arguments ( size, attr )
            echo '</td>';
            echo '<td>';
            echo '<p style="font-size:10pt;">'.$_product->post_title.'</p><td><p style="font-size:10pt;">x'. $values['quantity'] . '</p></td>'; 
            echo '</td></tr>';
            };
              ?>
                </tr>
              </table>
            </td>
            <td>
              <p>
                <?php
            do_action( 'woocommerce_admin_order_actions_start', $order );

            $actions = array();


            if ( $order->has_status( array( 'pending', 'on-hold', 'processing' ) ) ) {
              $actions['complete'] = array(
                'url'       => wp_nonce_url( admin_url( 'admin-ajax.php?action=woocommerce_mark_order_status&status=awaiting-shipment&order_id=' . $post->ID ), 'woocommerce-mark-order-status' ),
                'name'      => __( 'Complete', 'woocommerce' ),
                'action'    => "complete"
              );
            };

            $actions = apply_filters( 'woocommerce_admin_order_actions', $actions, $order );

            foreach ( $actions as $action ) {
              printf( '<a class="button %s" href="%s" data-tip="%s">%s</a>', esc_attr( $action['action'] ), esc_url( $action['url'] ), esc_attr( $action['name'] ), esc_attr( $action['name'] ) );
            }

            do_action( 'woocommerce_admin_order_actions_end', $order );
          ?>
              </p>
            </td>
            <td>
              <form action="">
                <input type="checkbox" class="ordercollected" value="0" />
              </form>
            </td>
          </tr>
          <?php endwhile; ?>

    </section>
  </body>

  </html>

  • @LoicTheAztec Esto fue agregado por la primera persona que editó la publicación. Tiene razón, es necesario eliminar los espacios, pero esto no resuelve el problema.

    – Teo

    1 de junio de 2016 a las 9:59

avatar de usuario
teo

Resolvió esto usando la información del siguiente enlace con el código adaptado a continuación:

https://wordpress.stackexchange.com/questions/180075/how-to-get-woocommerce-order-product-info

<?php  

foreach ($order->get_items() as $key => $lineItem) {

        //uncomment the following to see the full data
               // echo '<pre>';
               // print_r($lineItem);
               // echo '</pre>';
                $product_id = $lineItem['product_id'];
                $product = wc_get_product( $product_id );
                echo '<tr><td>' . $product->get_image() . '</td>'; // accepts 2 arguments ( size, attr )
                echo '<td>' . 'Product: ' . $lineItem['name'] . '</td>';
                echo '<td> x' . $lineItem['qty'] . '</td></tr>';
              }

              ?>

  • Además, puede mostrar las imágenes del producto con carrusel, consulte este repositorio: https://github.com/johnzenith/wordpress/blob/master/woocommerce/display-product-images.php

    – Juan Zenit

    7 de agosto de 2020 a las 6:55

¿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