如何在WooCommerce中显示订单商品缩略图并解决get_image_id()报错
WooCommerce 订单列表商品缩略图报错修复方案
错误根因
你遇到的报错是因为原代码没有对订单关联的商品对象做合法性校验:当订单对应的商品已被后台删除、或者是失效的商品变体时,获取商品对象的函数会返回布尔值false,此时直接调用get_image_id()方法就会触发成员函数调用错误。
原始报错信息:
Uncaught Error: Call to a member function get_image_id() on bool
修复方法
在原有代码的基础上,新增产品对象有效性校验逻辑即可,核心修改点如下:
- 调用产品类方法前,先判断获取到的对象是否为合法的
WC_Product实例 - 对无效的商品,返回占位图或者空内容,避免触发方法调用
完整修改后的代码示例
你可以直接替换原有实现代码:
// 在后台订单列表新增缩略图列 add_filter( 'manage_edit-shop_order_columns', 'custom_orders_list_column_products_thumbnail', 20 ); function custom_orders_list_column_products_thumbnail( $columns ) { $new_columns = array(); foreach ( $columns as $column_key => $column_label ) { $new_columns[$column_key] = $column_label; if ( 'order_title' === $column_key ) { $new_columns['product_thumbnails'] = __('商品缩略图', 'woocommerce'); } } return $new_columns; } // 渲染缩略图列内容 add_action( 'manage_shop_order_posts_custom_column', 'custom_orders_list_column_products_thumbnail_content', 20, 2 ); function custom_orders_list_column_products_thumbnail_content( $column, $post_id ) { if ( 'product_thumbnails' === $column ) { $order = wc_get_order( $post_id ); $thumbnails = array(); foreach ( $order->get_items() as $item ) { $product = $item->get_product(); // 新增有效性校验 if ( is_a( $product, 'WC_Product' ) ) { $thumbnails[] = wp_get_attachment_image( $product->get_image_id(), array(45, 45), '', array('title' => $product->get_name()) ); } else { // 无效商品显示占位图,不需要的话可以删除本行替换为空字符串 $thumbnails[] = wc_placeholder_img( array(45, 45) ); } } echo implode(' ', $thumbnails); } }
可选调整
如果不想显示已删除/失效商品的占位图,可以把上面代码里wc_placeholder_img( array(45, 45) )替换为''即可。
内容的提问来源于stack exchange,提问作者Steve OSA
相关产品推荐
相关产品推荐

