WooCommerce后台致命错误求助:Call to a member function date() on null
问题分析与解决方案
错误原因
你遇到的Call to a member function date() on null错误,本质是两个问题叠加:
- 全局
$product变量不可靠:在WooCommerce后台产品列表的部分场景(比如批量操作、快速编辑流程),全局$product可能没有被正确实例化,导致$product为null,调用get_date_modified()时直接返回null; - 未处理
get_date_modified()返回null的情况:即使产品对象存在,若产品从未被修改过(或数据异常),get_date_modified()会返回null,此时调用date()方法就会触发致命错误。
修复后的代码
替换你functions.php中的对应代码为:
add_filter( 'manage_edit-product_columns', 'bbloomer_admin_products_date_column', 11 ); function bbloomer_admin_products_date_column( $columns ){ $new_columns = array(); foreach( $columns as $key => $column ){ $new_columns[$key] = $columns[$key]; if( $key === 'product_cat' ) $new_columns['modified_date'] = __( 'Last Modified date','woocommerce'); } return $new_columns; } add_action( 'manage_product_posts_custom_column', 'bbloomer_admin_products_date_column_content', 10, 2 ); function bbloomer_admin_products_date_column_content( $column, $product_id ){ if ( $column == 'modified_date' ) { // 通过product_id直接实例化产品对象,替代不可靠的全局变量 $product = wc_get_product( $product_id ); if ( $product ) { $modified_date = $product->get_date_modified(); // 检查日期对象是否有效,避免调用null的方法 if ( $modified_date instanceof WC_DateTime ) { echo $modified_date->date('F j, Y'); } else { // 产品未被修改时显示默认文本 echo __( 'Never modified', 'woocommerce' ); } } else { // 产品不存在时的提示 echo __( 'Invalid product', 'woocommerce' ); } } }
关键优化点
- 用
wc_get_product( $product_id )替代全局$product:确保每次都能准确获取当前产品的对象实例,不受后台场景影响; - 增加两层校验:先判断产品对象是否存在,再判断修改日期对象是否有效,彻底避免null调用方法的错误;
- 增加友好提示:针对产品未修改或无效的情况,显示对应的文本,提升后台体验。
内容的提问来源于stack exchange,提问作者Velphia
相关产品推荐
相关产品推荐

