通过插件覆盖WordPress主题页面

【通过插件覆盖WordPress主题页面】我想使用自定义的wordpress插件覆盖主题页面, 我尝试添加过滤器, 但没有结果, 我不想直接更改主题, 因为这对每个开发人员都是个坏主意。这是我的插件代码, 我添加了一个过滤器来检查页面

public function __construct(){ add_filter('theme_file_path', 'customize_theme_pages', 99, 2 ); }

我试图用我的自定义页面替换主题页面
public function customize_theme_pages($path, $file = ''){ if( 'woocommerce/checkout--/form-checkout.php' === $file ) { return plugin_dir_url( __FILE__ ).'inc/form-checkout.php'; } return $path; }

对我来说, 这似乎是合乎逻辑的解决方案, 但我的网站没有任何更改
#1你可以使用woocommerce_locate_template过滤器覆盖插件中的woocommerce模板文件。
一个简单的示例, 假设你想用插件的inc / checkout / form-checkout.php文件覆盖checkout / form-checkout.php:
function customize_theme_pages($template, $template_name, $template_path) { if ($template_name == 'checkout/form-checkout.php') { $template = plugin_dir_path( __FILE__ ) . 'inc/checkout/form-checkout.php'; } return $template; }add_filter('woocommerce_locate_template', 'customize_theme_pages', 99, 3);

**我已经测试了上面的代码, 并且可以在WordPress 4.9.8上运行的WooCommerce版本3.5.0上运行。
如果要替换标准页面模板, 则可以使用page_template过滤器。

    推荐阅读