
本文旨在解决在使用 WP_Query 在 WooCommerce 中获取订单详情时遇到的常见错误,并提供优化的代码示例。我们将重点关注如何正确获取订单 ID、订单项目,以及如何在 AJAX 调用中实现分页功能,避免常见的 500 错误,并确保数据正确显示。
在使用 WP_Query 查询 WooCommerce 订单时,需要注意几个关键点,以避免常见的错误。首先,要确保正确设置查询参数,特别是 post_type 和 post_status。其次,在循环中正确获取订单 ID 和订单对象。
示例代码:
以下代码展示了如何使用 WP_Query 获取已完成的 WooCommerce 订单,并获取订单 ID 和订单项目:
<?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' ] ) ) {
# 保证页码大于等于 1
$page = max( intval( $_POST[ 'page' ] ), 1 );
# 每页显示订单数量
$per_page = 4;
// 查询已完成的订单
$args = array(
'post_type' => 'shop_order',
'post_status' => 'wc-completed',
'orderby' => 'post_date',
'order' => 'DESC',
'posts_per_page' => $per_page,
'paged' => $page,
);
$loop = new WP_Query( $args );
$count = $loop->found_posts;
if ( $loop->h*e_posts() ) {
while ( $loop->h*e_posts() ) {
$loop->the_post();
// 获取订单 ID
$order_id = $loop->post->ID;
// 获取订单对象
$order = wc_get_order( $loop->post->ID );
$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>
';
}
}
}
}
// 分页逻辑
$pages_num = intval( ceil( $count / $per_page ) );
$is_last_page = $pages_num == $page;
$is_first_page = $pages_num === 1;
if ( $page >= 7 ) {
$start_loop = $page - 3;
if ( $pages_num > $page + 3 )
$end_loop = $page + 3;
else if ( $page <= $pages_num && $page > $pages_num - 6 ) {
$start_loop = $pages_num - 6;
$end_loop = $pages_num;
} else {
$end_loop = $pages_num;
}
} else {
$start_loop = 1;
if ( $pages_num > 7 )
$end_loop = 7;
else
$end_loop = $pages_num;
}
$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>";
}
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&q
uot;>' . $msg . '</div>' .
'<div class = "pagination-n*">' . $pagination_html . '</div>';
}
die();
}
?>关键点:
青泥AI
青泥学术AI写作辅助平台
360
查看详情
为了实现无需页面刷新的分页功能,需要使用 AJAX。以下代码展示了如何使用 AJAX 调用上述函数,并更新页面内容:
HTML 代码 (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"
};
// Send the data
$.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 解决方案,满足你的业务需求。
以上就是WooCommerce 自定义 WP_Query 中获取订单详情时出错的解决方案的详细内容,更多请关注php中文网其它相关文章!
相关文章:
网易大神账号申诉需要多久_网易大神账号申诉流程说明
微信群消息显示延迟如何解决 微信群消息刷新优化方法
Go语言中JSON数据解码与字段访问指南
Lar*el 8 多关键词数据库搜索优化实践
J*a递归快速排序中静态变量的状态管理与陷阱
解决深度学习模型训练初期异常高损失与完美验证准确率问题
天猫2025双十一0点秒杀攻略 天猫爆款抢购时间
outlook中文官网入口地址 outlook官方中文版直达首页链接
QQ邮箱登录平台入口 QQ邮箱网页版邮箱官方入口
css元素hover动画延迟生效怎么办_使用animation-delay调整触发时间
Win11怎么开启高性能模式_Windows 11电源计划优化设置
深入理解Go语言中的指针类型:以*string为例
台积电1.4nm工艺A14瞄准2028:10年来性能提升80%
Safari浏览器输入栏卡顿如何解决 Safari搜索建议与缓存清理
cad如何更改注释性对象的比例_cad注释性比例调整方法
在Go语言中利用后缀数组处理多字符串:实现高效文本匹配与自动补全
韩剧圈正版入口页面_韩剧圈官网登录链接
LINUX怎么设置定时任务_LINUX crontab配置教程
百度网盘网页版入口 百度网盘网页版官方登录网址
抖音网页版企业服务中心登录入口_抖音网页版企业登录平台
使用Python高效删除Word宏并转换DOCM为DOCX格式
yandex入口引擎手机版 yandex安卓版下载入口
蛙漫2日版入口 WAMAN2(日版)无删减漫画官网链接
Centos/Linux 系统下安装 composer 的完整步骤
Selenium Python中处理点击后新窗口加载冻结问题的策略与实践
微信网页版扫码登录入口 微信网页版二维码登录入口
限制HTML日期输入框的日期选择范围
基于多条件高效更新SQL表:利用CASE表达式优化业务逻辑
CSS图片焦点样式实现教程:理解与应用tabindex属性
在J*a中如何开发简易电子商务商品管理系统_商品管理系统项目实战解析
优化Lar*el Docker镜像:Composer与PHP版本控制策略
使用 Pandas 高效处理 .dat 文件:数据清洗与数值计算实战
从OpenAI API响应中高效提取生成文本
Win10快速启动功能利弊分析 Win10开启或关闭快速启动教程【技巧】
提升屏幕阅读器对“m”时间单位的播报准确性:HTML与CSS组合解决方案
夸克浏览器桌面版同步不了书签怎么处理 夸克浏览器跨设备同步异常解决方案
Windows电脑怎么截图最方便_系统自带截图工具的5种神仙用法【技巧】
CSS自定义字体样式被系统字体替换怎么办_font-face方式指定font-display控制渲染策略
网站内容防复制粘贴的实现策略与局限性
msn官网入口地址手机版 msn官方网站手机最新链接
J*aScript设计模式实践_j*ascript代码优化
在FastAPI中利用lifespan与依赖注入高效管理Redis连接池
Go语言实现持久化与原子性文件存储的教程
铃兰之剑为这和平的世界希里技能组及加点推荐
C#中解析不规范的HTML为XML 常见的坑与解决办法
Golang如何优雅处理error_Golang error处理最佳实践总结
2025-2030年全球乘用车销量预测:新能源成增长主力
谷歌邮箱网页版官方页面入口 谷歌邮箱网页端快速访问
解决 Vaadin 8 中大文件音频播放与定位时出现的 IOException
实现分段式页面滚动导航:CSS与J*aScript教程