Как я могу добавить пользовательский заголовок в пользовательский шаблон в плагине, не используя папки темы?

Вопрос или проблема

Существует много документации о том, как создать пользовательские заголовки для темы. Например, если я хочу добавить заголовок с именем:

header-custom.php 

Я добавлю это в файл моего шаблона:

get_header('custom'); 

Если custom-header.php находится в той же директории, что и шаблон страницы, или в директории ‘root’ темы, заголовок загрузится как ожидалось.

Я не могу найти ничего для пользовательских заголовков для шаблонов страниц в плагине. Например, у меня есть файл шаблона single-node.php, расположенный в моей папке includes. Как я мог бы добавить что-то вроде:

get_header('custom');

и хранить это в моей директории includes или в другом месте в моем плагине?

Функция get_header() предназначена для тем. Обычно она ищет файл заголовка сначала в дочерней теме, а затем в родительской теме. Вы должны создавать пользовательский заголовок в директории темы, а не в плагине.

Но если вам действительно нужно загрузить файл заголовка из плагина, тогда вам нужно создать пользовательскую функцию.

Вот как это можно сделать.

Создайте файл header-custom.php в вашем плагине:

<?php
/**
 * PLUGIN_DIR/includes/header-custom.php
 * Файл заголовка в плагине
 */

?><!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(); ?>>
?>

Создайте пользовательскую функцию _get_header(), которая сначала будет проверять наличие файла в вашем плагине, затем в дочерней теме и затем в родительской теме. Измените значения в функции ниже в соответствии с вашими потребностями. Например, путь плагина

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 . "https://wordpress.stackexchange.com/" . $template_name)) {
            $located = STYLESHEETPATH . "https://wordpress.stackexchange.com/" . $template_name;
            break;
        } elseif (file_exists(TEMPLATEPATH . "https://wordpress.stackexchange.com/" . $template_name)) {
            $located = TEMPLATEPATH . "https://wordpress.stackexchange.com/" . $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;
}

И затем в вашем обычном файле темы вы можете добавить функцию _get_header() следующим образом:

// Проверьте, активен ли плагин, затем загрузите файл из плагина
if(in_array('PLUGIN_DIR/PLUGIN.php', apply_filters('active_plugins', get_option('active_plugins')))){ 
    _get_header('custom'); //загружает header-custom.php из плагина 

} else {
    get_header();
}

Ответ или решение

Как добавить пользовательский заголовок в собственный шаблон плагина, не используя директорию темы

Когда вы разрабатываете собственный плагин для WordPress, возникает необходимость добавления пользовательского заголовка в шаблон, не прибегая к изменениям в темах. Рассмотрим способ организации этой задачи.

Шаг 1: Создание пользовательского заголовка в плагине

Сначала создайте файл заголовка внутри вашего плагина, например, header-custom.php. Этот файл будет включать стандартный HTML-код и элементы WordPress, необходимые для заголовка:

<?php
/**
 * PLUGIN_DIR/includes/header-custom.php
 * Заголовок внутри плагина
 */

?>
<!DOCTYPE html>
<html <?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(); ?>>

Шаг 2: Создание пользовательской функции для подключения заголовка

Поскольку стандартная функция get_header() предназначена для использования в темах, нам необходима кастомная функция, которая будет загружать файл из плагина.

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 (empty($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;
}

Шаг 3: Интеграция пользовательской функции в шаблон

Последним шагом будет использование функции _get_header() в ваших шаблонах:

// Проверьте, активен ли плагин, и загрузите файл из плагина
if (in_array('PLUGIN_DIR/PLUGIN.php', apply_filters('active_plugins', get_option('active_plugins')))) { 
    _get_header('custom'); // загружает header-custom.php из плагина
} else {
    get_header();
}

Заключение

С использованием данного подхода вы обеспечите универсальность вашего плагина, избегая зависимости от темы. Это позволит пользователю адаптировать функциональность плагина, сохраняя тематику сайта неизменной. Наряду с особенностями WordPress, такие решения улучшают совместимость и позволяют более гибко настраивать платформу в соответствии с бизнес-требованиями.

Оцените материал
Добавить комментарий

Капча загружается...