You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

复制Dokan代码至Xtocky主题文件后出现Trying to get property of non-object错误如何修复?

修复 "Trying to get property of non-object" 错误

这个错误本质是你复制的Dokan产品标签模板代码,在作者页面(author.php)的上下文里找不到它需要的对象——原来的product-tab.php是为单个产品详情页设计的,依赖的变量(比如产品对象$product、商家对象$vendor)在作者页面根本不存在,或者没有被正确初始化。

下面是具体的修复步骤:

1. 先定位错误根源

打开themes/xtocky/template-parts/author.php,找到报错提示里的行号,查看该行代码是在访问哪个对象的属性(比如$product->id、$vendor->store_name这类写法)。这个对象就是问题的核心。

2. 针对不同对象的修复方案

情况一:代码依赖$product(产品对象)

产品详情页的$product是全局变量,对应当前单个产品,但作者页面是展示作者/商家的整体信息,没有默认的单个产品对象。你需要:

  • 如果是想在作者页面展示该商家的产品列表标签,先获取商家的所有产品,再循环处理;
  • 如果只是不小心引入了产品相关代码,直接给代码加判断,确保对象存在再执行:
global $product;
// 先检查$product是否是有效的WooCommerce产品对象
if ( ! is_a( $product, 'WC_Product' ) ) {
    return; // 或者显示"暂无产品"之类的提示
}
// 原来的产品标签代码放在这里

情况二:代码依赖$vendor(Dokan商家对象)

原来的模板可能默认当前页面的商家对象已经存在,但作者页面需要手动获取当前作者对应的商家信息:

// 获取当前作者的ID
$author_id = get_the_author_meta( 'ID' );
// 通过作者ID获取Dokan商家对象
$vendor = dokan_get_vendor( $author_id );

// 检查商家对象是否有效
if ( ! $vendor || ! $vendor->is_valid() ) {
    echo '<p>该作者不是Dokan商家</p>';
    return;
}
// 原来依赖$vendor的代码放在这里

3. 更稳妥的思路:不要直接复制模板

product-tab.php的设计场景和作者页面完全不同,直接复制会带来很多上下文不兼容的问题。建议:

  • 先明确你想在作者页面实现什么功能(比如展示商家的产品分类标签?);
  • 基于Dokan和WooCommerce的官方函数,重新编写适配作者页面的代码,而不是直接复用产品页的模板。

4. 调试小技巧

如果不确定变量的类型,可以在报错行前加调试代码,快速定位问题:

// 替换成你要检查的变量名
var_dump( $product ); 
exit;

执行后页面会显示该变量的实际值(比如null说明变量未初始化,bool(false)说明获取失败),帮你精准处理。

内容的提问来源于stack exchange,提问作者zac1987

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 08:04:18