How to list all products with total sales?

后端 未结 2 1559
礼貌的吻别
礼貌的吻别 2021-02-06 18:57

How to list all products from WooCommerce with total sales? This code is just for 1 product only. It\'s not work if put an array on $product.



        
相关标签:
2条回答
  • 2021-02-06 19:39

    For that you can use standard get_posts() function with custom field parameters. The example below will take all posts with sales greater than zero in a descending order, if you want to get all products remove the meta query part from the arguments array. The result is formatted in a HTML table.

    $args = array(
        'post_type' => 'product',
        'posts_per_page' => -1,
        'meta_key' => 'total_sales',
        'orderby' => 'meta_value_num',
        'order' => 'DESC',
        'meta_query' => array(
            array(
                'key' => 'total_sales',
                'value' => 0,
                'compare' => '>'
            )
        )
    );
    
    $output = array_reduce( get_posts( $args ), function( $result, $post ) {
        return $result .= '<tr><td>' . $post->post_title . '</td><td>' . get_post_meta( $post->ID, 'total_sales', true ) . '</td></tr>';
    } );
    
    echo '<table><thead><tr><th>' . __( 'Product', 'woocommerce' ) . '</th><th>' . __( 'Units Sold', 'woocommerce' ) . '</th></tr></thead>' . $output . '</table>';
    
    0 讨论(0)
  • 2021-02-06 20:03

    Try this code. It'll give you output in 2 format

    <?php
    global $wpdb;
    $results = $wpdb->get_results("SELECT p.post_title as product, pm.meta_value as total_sales FROM {$wpdb->posts} AS p LEFT JOIN {$wpdb->postmeta} AS pm ON (p.ID = pm.post_id AND pm.meta_key LIKE 'total_sales') WHERE p.post_type LIKE 'product' AND p.post_status LIKE 'publish'", 'ARRAY_A');
    ?>
    <table>
        <tr>
            <th><?php _e( 'Product' ); ?></th>
            <th><?php _e( 'Unit sold' ); ?></th>
        </tr>
    <?php
    foreach ( $results as $result ) {
        echo "<tr>";
        echo "<td>" . $result['product'] . "</td>";
        echo "<td>" . $result['total_sales'] . "</td>";
        echo "</tr>";
    }
    ?>
    </table>
    <div>
        <p><strong><?php echo __( 'Product' ) . ' - ' . __( 'Unit Sold' ); ?></strong></p>
        <?php
        foreach ( $results as $result ) {
            echo "<p>" . $result['product'] . ' - ' . $result['total_sales'] . "</p>";
        }
        ?>
    </div>
    

    Hope this will be helpful

    0 讨论(0)
提交回复
热议问题