
本文旨在解决在使用 WP_Query 自定义查询 WooCommerce 订单详情时遇到的 500 错误问题。通过分析问题代码,提供修复后的代码示例,并详细解释代码逻辑和注意事项,帮助开发者正确使用 WP_Query 获取和展示 WooCommerce 订单数据,实现分页加载等功能。本文还提供优化后的代码示例,使其更易于理解和维护。
在使用 WP_Query 获取 WooCommerce 订单详情时,经常会遇到一些问题,特别是当涉及到 AJAX 调用和分页功能时。 出现 500 错误通常是因为在循环内部使用了不正确的变量或方法来获取订单信息。以下将详细介绍如何正确地使用 WP_Query 来获取 WooCommerce 订单详情,并提供可行的解决方案。
原始代码中存在几个问题:
以下是修复后的代码示例,它解决了上述问题并提供了更清晰的实现方式:
CA.LA
第一款时尚产品在线设计平台,服装设计系统
86
查看详情
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->h*e_posts() ) {
while ( $loop->h*e_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-n*">' . $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/j*ascript">
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>通过本文,你应该能够理解如何正确地使用 WP_Query 来获取 WooCommerce 订单详情,并实现分页加载等功能。 修复后的代码示例解决了原始代码中存在的问题,并提供了更清晰的实现方式。记住要遵循最佳实践,确保你的代码安全、高效和易于维护。
以上就是WooCommerce 自定义 WP_Query 获取订单详情时出错的解决方案的详细内容,更多请关注php中文网其它相关文章!
# 并与
# 衢州网站优化渠道
# seo历史
# 许昌网站关键词推广排名
# 湘艺苑营销推广方案
# 邢台关键词网络推广排名
# 上市公司网站建设要求
# 怎么当营销号抖音推广
# 酒店网站建设需求分析
# 微博推广营销效率高吗
# 凡科网站seo
# 加载
# 后端
# 更清晰
# 正确地
# 不正确
# php
# 等功能
# 使其
# 自定义
# 分页
# red
# 代码可读性
# ai
# 工具
# 浏览器
# ajax
# html
# jquery
# java
# javascript
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
优化推广96088 】
【
技术知识133117 】
【
IDC资讯59369 】
【
网络运营7196 】
【
IT资讯61894 】
相关推荐:
Win10显卡驱动安装失败怎么办 Win10使用DDU彻底卸载驱动【解决】
百度小说看书时如何翻页_百度小说手动翻页与自动翻页设置
纯CSS实现滚动时动态时间轴线条颜色填充效果
荣耀Magic6 Pro拍照成像偏暗_荣耀Magic6 Pro夜景优化
小红书网页版首页入口 小红书网页版电脑端官方登录链接
Win10锁屏时间怎么设置 Win10调整自动锁屏时间方法
CSS过渡如何实现按钮悬停效果_transition属性控制背景颜色变化
追剧达人如何发弹幕
优化响应式标题底部边框:CSS实现技巧与最佳实践
哔哩哔哩黑名单怎么查看
diskgenius分区工具如何设置Bios启动项
OPPO A3 WiFi频繁断开怎么办 OPPO A3网络优化技巧
电子白板帮助菜单使用指南
Composer如何使用composer-plugin-api开发自定义插件
《淘票票》添加到苹果钱包教程
TikTok搜索结果不显示怎么办 TikTok搜索刷新与优化方法
《虎扑》关闭社区内容推荐方法
顺丰快递在线查询系统 顺丰快递官方查单入口
《密马》发布账号方法
如何在CSS中使用absolute实现登录弹窗居中_transform translate结合
快递查询,一键速查
win11资源管理器标签页怎么用 Win11文件管理器多标签高效操作【新功能】
Win10如何关闭开机锁屏界面_Windows10跳过锁屏直接登录设置
如何使用CSS Grid实现“大方块左侧,小方块右侧垂直堆叠”的水平布局
AO3中文版手机快速通道_AO3最新稳定链接更新
如何编写一个符合 composer 规范的 post-install-cmd 脚本?
Firefox OS应用开发:解决XMLHttpRequest跨域请求阻塞问题
厨房地面防滑垫的油污怎么洗? 机洗和手洗防滑垫的注意事项
高德地图怎么查看未来行程规划_高德地图未来行程规划查看方法
如何外贸网站设计-能留住客户提升用户体验!
在Dash应用中自定义HTML标题和网站图标
Excel如何设置动态下拉菜单_Excel表格下拉选项快速方法
《暗黑破坏神4》国服回归送狂欢礼包 价值6916元
快手极速版在线体验区 快手极速版网页体验入口
yy漫画登录页面官方入口_yy漫画在线阅读网址入口
KFC邀请码怎么使用领额外优惠_KFC邀请码输入方式与额外优惠代码获取方法
如何在CSS中实现盒模型多列间距_grid-gap与padding结合
《原神》月之一版本新增书籍一览
在Django单元测试中优雅处理信号:基于环境的条件执行策略
苹果手机手电筒无法开启
高效调试PHP大型嵌套数组:JSON序列化与可视化工具实践
阿里旺旺电脑网页版入口 阿里旺旺电脑版网页登录入口
西瓜视频怎么查看访客记录_西瓜视频访客记录查看方法
Go反射进阶:访问内嵌结构体中的被遮蔽方法
Vue 3中独立响应式实例的创建与应用
济南公交卡手机充值指南
51漫画网实时入口 51漫画网页版官方免费漫画入口
Win10如何彻底关闭OneDrive Win10禁用云同步功能【纯净】
猫眼电影app如何参与官方的抽奖活动_猫眼电影官方抽奖参与方法
多闪APP官方下载安装入口_多闪最新版本获取入口
2025-10-08
运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。