如何在不使用主题文件夹的情况下将自定义标题添加到插件中的自定义模板

时间:2020-10-15 作者:Jbingy

有很多关于如何为主题创建自定义标题的文档。例如,如果我想添加一个名为:

header-custom.php 
我会将此添加到我的模板文件中:

get_header(\'custom\'); 
如果自定义标题。php与页面模板或“根”主题目录位于同一目录中,标题将按预期加载。

我在插件中找不到任何页面模板的自定义标题。例如,我有一个模板文件单节点。php位于我的includes文件夹中。我如何添加以下内容:

get_header(\'custom\');
并将其存储在我的includes目录或插件的其他地方?

1 个回复
SO网友:Awais

这个get_header() 功能是为主题而设计的。它通常先在子主题中查找头文件,然后在父主题中查找。您应该在主题目录下而不是在插件中创建自定义标题。

但如果您确实必须从插件加载头文件,那么您必须创建一个自定义函数。

以下是您可以做到这一点的方法。

创建文件头自定义。插件中的php:

<?php
/**
 * PLUGIN_DIR/includes/header-custom.php
 * Header file in plugin
 */

?><!DOCTYPE html>

<html class="no-js" <?php language_attributes(); ?>>

    <head>

        <meta charset="<?php bloginfo( \'charset\' ); ?>">
        <meta name="viewport" content="width=device-width, initial-scale=1.0" >

        <link rel="profile" href="https://gmpg.org/xfn/11">

        <?php wp_head(); ?>

    </head>

    <body <?php body_class(); ?>>
?>
创建自定义函数\\u get\\u header(),该函数将首先在插件中查找文件,然后查找子主题,然后查找父主题。根据需要更改以下函数中的值。e、 g.插件路径

function _get_header($name, $args = array()) {

    $require_once = true;
    $templates = array();

    $name = (string) $name;
    if (\'\' !== $name) {
        $templates[] = "header-{$name}.php";
    } else {
        return false;
    }

    $templates[] = \'header.php\';

    $located = \'\';
    foreach ($templates as $template_name) {

        if (!$template_name) {
            continue;
        }

        if (file_exists(WP_PLUGIN_DIR . \'/PLUGIN_DIR/includes/\' . $template_name)) {

            $located = WP_PLUGIN_DIR . \'/PLUGIN_DIR/includes/\' . $template_name;
            break;
        } elseif (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 (\'\' !== $located) {
        load_template($located, $require_once, $args);
    }

    return $located;
}
然后在常规主题文件中,可以添加如下\\u get\\u header()函数:

// Check if plugin is active then load file from plugin
if(in_array(\'PLUGIN_DIR/PLUGIN.php\', apply_filters(\'active_plugins\', get_option(\'active_plugins\')))){ 
    _get_header(\'custom\'); //loads header-custom.php from plugin 

} else {
    get_header();
}