WordPress从插件替换header.php

时间:2019-02-19 23:22:47

标签: wordpress

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

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

在我看来到处似乎都无法完成,并且您只能从主题/子主题更改模板部分。

但是,诸如Elementor页面构建器之类的插件如何在其主题构建器中实现呢?

谢谢, 丹尼尔

3 个答案:

答案 0 :(得分:0)

Elementor不会替换header.php。它采用活动主题具有的所有header.php。它仅接管the_content()部分。

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

您可以使用不同的标头(不是不同的header.php)构建page template

答案 1 :(得分:0)

我有使用与元素或站点起源类似的页面构建器的经验。

据我所知,wordpress页面构建器不会操纵或替换主题模板文件。取而代之的是,许多页面构建器内容都显示在前端,模板文件中包含the_content()。此外,它还会在网页上附加一堆CSS和JS脚本,以处理元素的样式和交互性。

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

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

答案 2 :(得分:0)

我还需要从插件中包含一个自定义header.php。因为您可以通过${type}_template hook从插件注册page.php,post.php或archive.php之类的模板,所以我认为对header.php进行相同的操作并不难,但是您可以不会从父主题或子主题的目录之外的目录中加载自定义header.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函数,并通过插件模板中的require或require_once语句包括插件的header.php。但是,您将必须实现自己的get_header挂钩和locate_template功能,才能从父主题或子主题中进行替换。省略get_header函数时,请参阅以下答案以获取有关限制的更多信息: https://wordpress.stackexchange.com/a/5195/80177