WooCommerce:生成指定HTML结构的PHP文件位置查询
首先,你已经排除了content-single-product.php和主题的page.php,这很合理——因为WooCommerce商品页有自己独立的模板加载逻辑,不会依赖主题的普通page模板。针对你要找的这段容器代码,我给你几个最可能的方向:
1. 优先检查主题的WooCommerce兼容模板
很多支持WooCommerce的主题会重写WooCommerce的全局模板来适配自己的布局。你可以看看你的bolts-pt主题目录下有没有这个文件:wp-content/themes/bolts-pt/woocommerce/global/wrapper-start.php
WooCommerce的wrapper-start.php是专门负责输出页面主容器(包括你提到的.content-area、.row、#main这些结构)的模板文件。如果主题里有这个文件,那90%的概率这段代码就在这里——因为主题会优先加载自己重写的WooCommerce模板,而不是插件自带的版本。
2. 检查WooCommerce插件自带的模板
如果主题里没有重写这个模板,那代码就来自WooCommerce插件本身的模板,路径是:wp-content/plugins/woocommerce/templates/global/wrapper-start.php
打开这个文件,你应该能看到类似的容器HTML结构,WooCommerce默认会在这里输出页面的基础布局框架。
3. 排查主题的钩子回调(如果上面两个都没找到)
还有一种可能:这段代码是主题通过WooCommerce的钩子动态添加的。WooCommerce在商品页渲染时会触发woocommerce_before_main_content钩子,很多主题会在这个钩子上挂载函数来输出自定义布局容器。
你可以临时在主题的functions.php里添加一段调试代码,来查看这个钩子上的所有回调函数:
add_action('woocommerce_before_main_content', function() { global $wp_filter; if (isset($wp_filter['woocommerce_before_main_content'])) { var_dump($wp_filter['woocommerce_before_main_content']); } }, 0);
访问商品页面后,你会看到所有挂载在这个钩子上的函数列表,找到对应的函数后,就能定位到它所在的文件(通常是主题的functions.php或者主题的某个自定义插件里)。
补充:为什么删主题page.php没用?
WooCommerce有自己的模板优先级规则,商品页会优先加载single-product.php(不管是插件自带的还是主题重写的),完全不会用到主题的普通page.php,所以你删除page.php自然不会影响商品页的布局~
内容的提问来源于stack exchange,提问作者Habanera

