如何在content-product.php中打印当前WooCommerce产品循环查询?
解决WooCommerce产品循环主查询语句打印问题
直接用$wpdb->last_query拿不到产品循环的整体查询,是因为循环执行过程中会触发大量单个产品的附属查询(比如获取产品元数据、缩略图、分类标签等),这个变量只会保存最后执行的那条SQL,自然不是你要的主循环查询。
下面是两种可行的解决方法:
方法一:默认产品存档主循环(Shop页、分类/标签页等)
在content-product.php里添加以下代码,直接获取全局主查询对象的SQL语句:
global $wp_query; // 格式化打印主查询SQL echo '<pre>' . esc_html( $wp_query->request ) . '</pre>';
$wp_query->request直接存储了当前主循环的完整SQL语句,不会被后续的单个产品查询覆盖。
方法二:自定义产品循环(使用WC_Product_Query或自定义WP_Query)
如果是你自己创建的产品循环,需要在初始化查询时就获取并保存主查询的SQL:
- 创建查询时:
$product_args = array( 'status' => 'publish', 'limit' => 12, // 你的其他查询参数 ); $product_query = new WC_Product_Query( $product_args ); $products = $product_query->get_products(); // 获取并保存主查询SQL,可通过全局变量传递到模板 $main_product_sql = $product_query->get_main_query()->request;
- 在
content-product.php里打印:
echo '<pre>' . esc_html( $main_product_sql ) . '</pre>';
注意:打印时用esc_html()转义内容,避免XSS风险,<pre>标签能让SQL格式更易读。
内容的提问来源于stack exchange,提问作者Bhavesh Taneja
相关产品推荐
相关产品推荐

