wordpress - 获取我的 woocommerce 商店所有用户的前 10 次购买

标签 wordpress woocommerce

我正在尝试一些查询,我刚刚创建了一个短代码,它确实让我获得了 woocommerce 商店中前 10 项购买的商品,并在列表中显示名称价格和排名。它工作得很好,但我不知道这是否是最佳实践和/或安全。有人可以确认我的解决方案和/或编辑它吗?

提前致谢!

function topranking(){

    // WOOCOMMERCE QUERY TOP 10
    $query   = new WC_Order_Query( array(
        'limit'      => 10,
        'orderby'    => 'price',
        'status'     => 'completed',
        'order'      => 'DESC',
        'return'     => 'ids',
    ) );
    $orders  = $query->get_orders();

    $total_amount = array();
    $count = 0;

    foreach ( $orders as $order_id ) {
        $order                            = wc_get_order( $order_id );
        $total_amount[ $order_id ]        = $order->get_total();
        $billing_first_name [ $order_id ] = $order->get_billing_first_name();
        $billing_last_name  [ $order_id ] = $order->get_billing_last_name();
        $count++;
        ?>
            <p><?php echo $count ?></p>
            <p><?php echo $total_amount[ $order_id ] ?></p>
            <p><?php echo $billing_first_name [ $order_id ] ?></p>
            <p><?php echo $billing_last_name [ $order_id ] ?></p>      
        <?php
    }
 }
add_shortcode('top', 'topranking');

最佳答案

有两件事。

  1. 请注意,短代码调用的函数不应产生任何类型的输出。短代码函数应返回用于替换短代码的文本。

  2. 转义你的输出。

<?php
function topranking(){

    // WOOCOMMERCE QUERY TOP 10
    $query   = new WC_Order_Query( array(
        'limit'      => 10,
        'orderby'    => 'price',
        'status'     => 'completed',
        'order'      => 'DESC',
        'return'     => 'ids',
    ) );
    $orders  = $query->get_orders();

    $total_amount = array();
    $count = 0;
    // If you want to echo your output... use output buffering
    ob_start();
    foreach ( $orders as $order_id ) {
        $order                            = wc_get_order( $order_id );
        $total_amount[ $order_id ]        = $order->get_total();
        $billing_first_name [ $order_id ] = $order->get_billing_first_name();
        $billing_last_name  [ $order_id ] = $order->get_billing_last_name();
        $count++;
        ?>
        <p><?php echo esc_html($count); ?></p>
        <p><?php echo esc_html($total_amount[ $order_id ]); ?></p>
        <p><?php echo esc_html($billing_first_name [ $order_id ]); ?></p>
        <p><?php echo esc_html($billing_last_name [ $order_id ]); ?></p>
        <?php
    }
    // Return shortcode output.
    return ob_get_clean();
}
add_shortcode('top', 'topranking');

或使用串联

function topranking() {

    // WOOCOMMERCE QUERY TOP 10
    $query = new WC_Order_Query( array(
        'limit'   => 10,
        'orderby' => 'price',
        'status'  => 'completed',
        'order'   => 'DESC',
        'return'  => 'ids',
    ) );
    $orders = $query->get_orders();
    $total_amount = array();
    $count = 0;
    // Instead of output buffer - set $output to empty string
    $output = '';
    foreach ( $orders as $order_id ) {
        $order = wc_get_order( $order_id );
        $total_amount[$order_id] = $order->get_total();
        $billing_first_name [$order_id] = $order->get_billing_first_name();
        $billing_last_name  [$order_id] = $order->get_billing_last_name();
        $count++;

        $output .= '<p>' . esc_html( $count ) . '</p>';
        $output .= '<p>' . esc_html( $total_amount[$order_id] ) . '</p>';
        $output .= '<p>' . esc_html( $billing_first_name [$order_id] ) . '</p>';
        $output .= '<p>' . esc_html( $billing_last_name [$order_id] ) . '</p>';
        
    }
    // Return shortcode output.
    return $output;
}

add_shortcode( 'top', 'topranking' );

关于wordpress - 获取我的 woocommerce 商店所有用户的前 10 次购买,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68783107/

相关文章:

jquery - 数量选择更改时 WooCommerce 显示价格

php - 根据 Woocommerce 订单状态禁用特定付款方式

javascript - 从父元素隐藏某些内容但在 CSS 中显示子元素

php - WooCommerce 产品类别自定义字段 - 设置时间购买限制

php - MySQL 返回 PHP 关联数组 - 但我无法访问数组数据

php - 加入(wordpress)缺少行的元表

php - 无法将文件上传到wordpress

css - 创建一个全页宽的页眉

javascript - Ajax上传图片

php - WooCommerce:如果购物车中已存在产品,则增加购物车商品数量