WordPress从插件替换header.php



我已经搜索了,找不到任何答案。

如何从自定义插件中替换主题 header.php 模板?

到处我看起来似乎都无法完成,您只能将模板零件从主题/儿童主题更改。

但是,像Elementor Page Builder这样的插件如何在其主题构建器中进行?

谢谢丹尼尔

我还需要从插件中包含一个自定义header.php。因为您可以通过$ {type} _template挂钩登录诸如page.php之类的模板。无法从父母或子主题的目录中加载自定义标题。php。

沿 get_header函数穿越时,您会看到locate_template函数被调用以加载标题模板。但是,没有办法将其连接到该功能并替换已加载的标头模板的路径:

    function locate_template( $template_names, $load = false, $require_once = true, $args = array() ) {
        $located = '';
        foreach ( (array) $template_names as $template_name ) {
            if ( ! $template_name ) {
                continue;
            } 
            if ( file_exists( STYLESHEETPATH . '/' . $template_name ) ) {
                $located = STYLESHEETPATH . '/' . $template_name;
                break; 
            } elseif ( file_exists( TEMPLATEPATH . '/' . $template_name ) ) {
                $located = TEMPLATEPATH . '/' . $template_name;
                break;
            } elseif ( file_exists( ABSPATH . WPINC . '/theme-compat/' . $template_name ) ) {
                $located = ABSPATH . WPINC . '/theme-compat/' . $template_name;
                break;
            }
        }
        if ( $load && '' !== $located ) {
            load_template( $located, $require_once, $args );
        }
        return $located;
    }

绕过此限制的一种解决方案是摆脱插件模板中的get_header函数,并通过requience或requient_once语句从插件的模板中包含插件的header.php。但是,您将必须实现自己的get_header钩子和找到template功能,以从父或子主题中替换。省略get_header函数时有关限制的更多信息,请参见此答案:https://wordpress.stackexchange.com/a/5195/80177

我使用了此解决方案

add_action('get_header', 'wpbet_replace_theme_header');
function wpbet_replace_theme_header(){
    require plugin_dir_path( __FILE__ ) . 'templates/headers/header-padrao.php';
    $templates   = [];
    $templates[] = 'header.php';
    remove_all_actions( 'wp_head' );
    ob_start();
    locate_template( $templates, true );
    ob_get_clean();
}

Elementor不会替换header.php。它采用主动主题具有的任何header.php。它只是接管the_content()部分。

header.php是必不可少的部分&主题的资产。

您可以使用不同的标头(不是不同的标题)构建页面模板

我有使用类似的页面构建器与Elementor的经验,称为site Origin。

我最好的是,WordPress页面构建者不会操纵或替换主题模板文件。取而代之的是,在模板文件中发现了许多页面构建器内容,在前端显示了the_content()。此外,它将一堆CSS和JS脚本附加到网页上,以处理元素的样式和互动性。

至于您最初的问题...如果我正确理解,则无需此插件,因为可以在主题编辑器中自由编辑/替换header.php文件!

在"管理员"部分中,转到"外观">"编辑器"。然后在"主题文件"下,选择header.php。

的模板

最新更新