Woocommerce 3.0+按文章作者展示相关产品无内容问题求助
排查与修复方案
我来帮你一步步解决这个问题,你的代码里有几个关键逻辑错误导致页面没有输出内容,咱们逐一修正:
1. 先确认$related_products是否包含有效数据
如果$related_products本身是空数组,循环自然不会输出任何内容。你可以先在循环前加个调试语句,验证这个变量的内容:
global $post; $authorid = $post->post_author; // 调试:打印关联产品数据,确认是否有内容 var_dump($related_products); foreach ( $related_products as $related_product ) : // ... 你的原有代码 endforeach;
如果输出为空,那得先解决WooCommerce关联产品的生成问题,确保系统确实返回了关联产品列表。
2. 修正核心逻辑错误
你代码里的$post_object = get_post( $related_product->$authorid );是完全错误的写法!这里的逻辑应该是检查当前关联产品的作者是否和当前文章作者一致,而不是用当前作者ID作为属性去访问产品对象。
正确的思路是:遍历每个关联产品时,获取它的作者ID($related_product->post_author),然后和当前文章的$authorid对比,只有两者相等的产品才输出模板。
3. 替换为正确的完整代码
把你原来的代码替换成下面的版本,我已经修复了逻辑问题,还加了必要的验证和数据重置操作:
global $post; $authorid = $post->post_author; // 先确认关联产品数组有效 if ( ! empty( $related_products ) && is_array( $related_products ) ) { foreach ( $related_products as $related_product ) { // 获取当前关联产品的作者ID $product_author_id = $related_product->post_author; // 只显示和当前文章作者相同的产品 if ( $product_author_id == $authorid ) { $post_object = get_post( $related_product->ID ); if ( $post_object ) { setup_postdata( $GLOBALS['post'] =& $post_object ); wc_get_template_part( 'content', 'product' ); } } } // 重置post数据,避免影响后续页面内容的输出 wp_reset_postdata(); }
4. 额外排查点(如果替换后仍无输出)
- 确认当前文章的作者ID(
$authorid)正确:可以用echo $authorid;打印出来,看看是否和你预期的一致。 - 确认
$related_products里确实存在和$authorid同作者的产品:可以遍历数组打印每个产品的post_author值验证。 - 检查模板文件路径:确认
wc_get_template_part( 'content', 'product' )对应的content-product.php文件存在于主题的woocommerce文件夹下,或者WooCommerce默认模板目录中。
内容的提问来源于stack exchange,提问作者JeVic
相关产品推荐
相关产品推荐

