WooCommerceWP_Query订单获取错误解决方法
2025-10-16 13:54:31
0浏览
收藏
今天golang学习网给大家带来了《WooCommerce WP_Query 订单获取错误解决办法》,其中涉及到的知识点包括等等,无论你是小白还是老手,都适合看一看哦~有好的建议也欢迎大家在评论留言,若是看完有所收获,也希望大家能多多点赞支持呀!一起加油学习~

本文旨在解决在使用 WP_Query 自定义查询 WooCommerce 订单详情时遇到的 500 错误问题。通过分析问题代码,提供修复后的代码示例,并详细解释代码逻辑和注意事项,帮助开发者正确使用 WP_Query 获取和展示 WooCommerce 订单数据,实现分页加载等功能。本文还提供优化后的代码示例,使其更易于理解和维护。
在使用 WP_Query 获取 WooCommerce 订单详情时,经常会遇到一些问题,特别是当涉及到 AJAX 调用和分页功能时。 出现 500 错误通常是因为在循环内部使用了不正确的变量或方法来获取订单信息。以下将详细介绍如何正确地使用 WP_Query 来获取 WooCommerce 订单详情,并提供可行的解决方案。
问题分析
原始代码中存在几个问题:
- 错误的订单 ID 获取方式: 使用 $loop->post->ID 获取订单 ID 在 WP_Query 循环中是不正确的。应该使用 get_the_ID() 函数。
- 重复查询: 代码中使用了两个 WP_Query 实例,一个用于循环,另一个用于计数。这会导致不必要的性能开销。
- 分页逻辑复杂: 分页逻辑可以简化,使用 WP_Query 的 paged 参数可以更方便地实现分页。
- 代码可读性差: 代码结构可以优化,使其更易于理解和维护。
解决方案
以下是修复后的代码示例,它解决了上述问题并提供了更清晰的实现方式:
functions.php
<?php
add_action( 'wp_ajax_demo_pagination_posts', 'demo_pagination_posts' );
add_action( 'wp_ajax_nopriv_demo_pagination_posts', 'demo_pagination_posts' );
function demo_pagination_posts() {
global $wpdb;
if ( isset( $_POST['page'] ) ) {
// Sanitize and validate the page number
$page = max( intval( $_POST['page'] ), 1 );
$per_page = 4; // Number of orders per page
// WP_Query to retrieve shop orders with pagination
$args = array(
'post_type' => 'shop_order',
'post_status' => 'wc-completed',
'orderby' => 'post_date',
'order' => 'DESC',
'posts_per_page' => $per_page,
'paged' => $page, // Use the 'paged' parameter for pagination
);
$loop = new WP_Query( $args );
$count = $loop->found_posts; // Total number of posts found
$msg = '';
if ( $loop->have_posts() ) {
while ( $loop->have_posts() ) {
$loop->the_post();
// Get the order ID
$order_id = get_the_ID();
// Get an instance of the WC_Order Object
$order = wc_get_order( $order_id );
if ( $order ) {
$items = $order->get_items();
$orders_id = $order->get_id();
$status = wc_get_order_status_name( $order->get_status() );
$date_created = $order->get_date_created()->date( 'd/m/Y' );
$payment_method = $order->get_payment_method_title();
$order_total = $order->get_formatted_order_total();
foreach ( $items as $item ) {
$product_name = $item->get_name();
$view_order = $order->get_view_order_url();
$product = $item->get_product();
if ( $product instanceof WC_Product ) {
$order_img = $product->get_image();
$downloads = $order->get_downloadable_items();
$download_button = '';
if ( is_array( $downloads ) ) {
foreach ( $downloads as $product ) {
$download_button = '<a href="' . $product['download_url'] . '" target="_blank">Download</a>';
}
}
$msg .= '
<table class="table_orders" border="2">
<tr class="table_row_items">
<td class="product_number">
<span class="mobile title">Ordine</span>
<span>#' . esc_attr( $orders_id ) . '</span>
</td>
<td class="product_name">
<span class="mobile title">Prodotto</span>
<a href="' . wp_kses_post( $view_order ) . '">' . wp_kses_post( $product_name ) . '</a>
</td>
<td class="product_data">
<span class="mobile title">Data</span>
<span>' . wp_kses_post( $date_created ) . '</span>
</td>
<td class="product_price">
<span class="mobile title">Prezzo</span>
<span>' . wp_kses_post( $order_total ) . '</span>
</td>
<td class="product_status">
<span class="mobile title">Stato</span>
<span class="label ' . $order->get_status() . '">' . wp_kses_post( $status ) . '</span>
</td>
<td class="product_action">
<span class="mobile title">File</span>
<a target=”_blank” href="' . esc_url( $view_order ) . '">Visualizza<i class="fa-duotone fa-eye"></i></a>
</td>
</tr>
</table>
';
}
}
}
}
}
// Pagination logic
$pages_num = intval( ceil( $count / $per_page ) );
$is_last_page = $pages_num == $page;
$is_first_page = $page === 1;
$pagination_html = "<div class='pagination-link'>";
$pagination_html .= "<ul>";
if ( !$is_first_page ) {
$pagination_html .= "<li data-pagenum='" . ( $page - 1 ) . "' class='active'>Previous</li>";
} else {
$pagination_html .= "<li class='inactive'>Previous</li>";
}
// Display page numbers
$start_loop = max( 1, $page - 3 );
$end_loop = min( $pages_num, $page + 3 );
for ( $i = $start_loop; $i <= $end_loop; $i++ ) {
if ( $page == $i ) {
$pagination_html .= "<li data-pagenum='$i' class='selected'>{$i}</li>";
} else {
$pagination_html .= "<li data-pagenum='$i' class='active'>{$i}</li>";
}
}
if ( !$is_last_page ) {
$pagination_html .= "<li data-pagenum='" . ( $page + 1 ) . "' class='active'>Next</li>";
} else {
$pagination_html .= "<li class='inactive'>Next</li>";
}
$pagination_html .= "</ul>";
$pagination_html .= "</div>";
echo '<div class="pagination-content">' . $msg . '</div>';
echo '<div class="pagination-nav">' . $pagination_html . '</div>';
wp_reset_postdata(); // Reset the global post data
}
die();
}custom-template.php
<div class="wrap">
<div id="primary" class="content-area">
<div class="col-md-12 content">
<div class="inner-box content no-right-margin darkviolet">
<script type="text/javascript">
jQuery(document).ready(function ($) {
// This is required for AJAX to work on our page
var ajaxurl = '<?php echo admin_url( 'admin-ajax.php' ); ?>';
function load_all_posts(page) {
var data = {
page: page,
action: "demo_pagination_posts"
};
$.post(ajaxurl, data, function (response) {
$(".pagination_container").html(response);
});
}
load_all_posts(1); // Load page 1 as the default
$(document).on('click', '.pagination-link ul li', function () {
var page = $(this).attr('data-pagenum');
load_all_posts(page);
});
});
</script>
<div class="pag_loading">
<div class="pagination_container">
<div class="post-content"></div>
</div>
</div>
</div>
</div>
</div>
</div>代码解释
- 使用 get_the_ID() 获取订单 ID: 在 WP_Query 循环内部,使用 get_the_ID() 函数来获取当前订单的 ID。
- 使用 paged 参数进行分页: WP_Query 的 paged 参数用于指定当前页码,简化了分页逻辑。
- 简化分页逻辑: 分页逻辑被简化,使用 max() 和 min() 函数来确定循环的起始和结束页码。
- HTML 结构: HTML 结构被优化,使其更易于阅读和维护。
- 错误处理: 添加了对 $order 对象的判断,确保订单对象存在。
- 使用 wp_reset_postdata(): 在 WP_Query 循环之后,调用 wp_reset_postdata() 函数来恢复全局 $post 对象。
注意事项
- 确保你的 WooCommerce 版本是最新的,以避免潜在的兼容性问题。
- 在处理订单数据时,务必进行适当的验证和转义,以防止安全漏洞。
- 根据实际需求调整每页显示的订单数量。
- 优化 AJAX 请求,减少服务器负载。
- 使用浏览器的开发者工具来调试 AJAX 请求和响应。
总结
通过本文,你应该能够理解如何正确地使用 WP_Query 来获取 WooCommerce 订单详情,并实现分页加载等功能。 修复后的代码示例解决了原始代码中存在的问题,并提供了更清晰的实现方式。记住要遵循最佳实践,确保你的代码安全、高效和易于维护。
以上就是《WooCommerceWP_Query订单获取错误解决方法》的详细内容,更多关于的资料请关注golang学习网公众号!
CSS选择器类型全解析
- 上一篇
- CSS选择器类型全解析
- 下一篇
- 9月全球车企市值榜:新能源强势领跑
查看更多
最新文章
-
- 文章 · 前端 | 27秒前 |
- CSS盒模型与Grid布局实战技巧
- 157浏览 收藏
-
- 文章 · 前端 | 9分钟前 |
- CSS相对定位偏移详解与应用
- 105浏览 收藏
-
- 文章 · 前端 | 21分钟前 |
- Python爬虫进阶:动态网站抓取技巧分享
- 281浏览 收藏
-
- 文章 · 前端 | 27分钟前 | JavaScript 性能优化 DOM操作 HTML5模板 可复用模板
- HTML5标签使用教程与实战解析
- 281浏览 收藏
-
- 文章 · 前端 | 30分钟前 |
- Python分页数据抓取技巧分享
- 481浏览 收藏
-
- 文章 · 前端 | 34分钟前 |
- JavaScript操作Canvas绘图详解
- 156浏览 收藏
-
- 文章 · 前端 | 40分钟前 |
- ESModule加载方式有哪些?详解ESModule用法
- 434浏览 收藏
-
- 文章 · 前端 | 42分钟前 |
- WebGL与Three.js打造3D网页沉浸体验
- 343浏览 收藏
-
- 文章 · 前端 | 43分钟前 |
- CSS图标旋转实现技巧与教程
- 348浏览 收藏
-
- 文章 · 前端 | 1小时前 |
- JavaScript服务端渲染优化方法
- 433浏览 收藏
-
- 文章 · 前端 | 1小时前 | html 预览 Atom live-server open-in-browser
- Atom编辑器运行HTML详细教程
- 352浏览 收藏
查看更多
课程推荐
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
查看更多
AI推荐
-
- ChatExcel酷表
- ChatExcel酷表是由北京大学团队打造的Excel聊天机器人,用自然语言操控表格,简化数据处理,告别繁琐操作,提升工作效率!适用于学生、上班族及政府人员。
- 3186次使用
-
- Any绘本
- 探索Any绘本(anypicturebook.com/zh),一款开源免费的AI绘本创作工具,基于Google Gemini与Flux AI模型,让您轻松创作个性化绘本。适用于家庭、教育、创作等多种场景,零门槛,高自由度,技术透明,本地可控。
- 3398次使用
-
- 可赞AI
- 可赞AI,AI驱动的办公可视化智能工具,助您轻松实现文本与可视化元素高效转化。无论是智能文档生成、多格式文本解析,还是一键生成专业图表、脑图、知识卡片,可赞AI都能让信息处理更清晰高效。覆盖数据汇报、会议纪要、内容营销等全场景,大幅提升办公效率,降低专业门槛,是您提升工作效率的得力助手。
- 3429次使用
-
- 星月写作
- 星月写作是国内首款聚焦中文网络小说创作的AI辅助工具,解决网文作者从构思到变现的全流程痛点。AI扫榜、专属模板、全链路适配,助力新人快速上手,资深作者效率倍增。
- 4535次使用
-
- MagicLight
- MagicLight.ai是全球首款叙事驱动型AI动画视频创作平台,专注于解决从故事想法到完整动画的全流程痛点。它通过自研AI模型,保障角色、风格、场景高度一致性,让零动画经验者也能高效产出专业级叙事内容。广泛适用于独立创作者、动画工作室、教育机构及企业营销,助您轻松实现创意落地与商业化。
- 3807次使用
查看更多
相关文章
-
- JavaScript函数定义及示例详解
- 2025-05-11 502浏览
-
- 优化用户界面体验的秘密武器:CSS开发项目经验大揭秘
- 2023-11-03 501浏览
-
- 使用微信小程序实现图片轮播特效
- 2023-11-21 501浏览
-
- 解析sessionStorage的存储能力与限制
- 2024-01-11 501浏览
-
- 探索冒泡活动对于团队合作的推动力
- 2024-01-13 501浏览

