通过插件覆盖wordpress主题页面

Overwrite wordpress theme page by plugin

我想使用我的自定义 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;
}

这对我来说似乎是合乎逻辑的解决方案,但我的网站没有任何变化

您可以使用 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);

**我已经测试了上面的代码,它正在 WooCommerce 版本 3.5.0 运行 WordPress 4.9.8[=25] 上运行=].

如果要替换标准页面模板,可以使用 page_template 过滤器。