WooCommerce自定义插件通过template_include覆写模板不生效如何解决
WooCommerce插件覆写模板不生效排查方案
核心问题&修正代码
你现有代码的路径拼接逻辑存在错误,untrailingslashit()会移除插件路径末尾的斜杠,拼接后续路径时缺少前置斜杠会生成无效路径,修正后的代码如下:
// 调整优先级为99,避免被WooCommerce或主题的同钩子逻辑覆盖 add_filter( 'template_include', 'demo_page_template', 99 ); function demo_page_template($template) { if ( is_product() ) { // 拼接路径时新增前置斜杠,保证路径格式正确 $custom_template = untrailingslashit( plugin_dir_path( __FILE__ ) ) . '/templates/woocommerce/single-product.php'; // 新增文件存在判断,避免路径错误返回无效模板 if ( file_exists( $custom_template ) ) { $template = $custom_template; } } return $template; }
额外排查项
- 确认文件路径和权限:检查插件根目录下是否存在
/templates/woocommerce/single-product.php文件,确保该文件权限配置正常,服务器进程可正常读取 - 清空缓存测试:依次清空WooCommerce模板缓存、站点全量缓存、浏览器缓存后再访问商品详情页验证效果
- 确认钩子执行时机:若你是在主题的functions.php中添加该代码,需要确保代码放在
after_setup_theme钩子回调内执行,避免WooCommerce条件判断失效
内容的提问来源于stack exchange,提问作者Danielsdv
相关产品推荐
相关产品推荐

