我正在尝试一些查询,我刚刚创建了一个短代码,它确实让我获得了 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');
最佳答案
有两件事。
请注意,短代码调用的函数不应产生任何类型的输出。短代码函数应返回用于替换短代码的文本。
转义你的输出。
<?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/