- Вопрос или проблема
- Ответ или решение
- Как добавить пользовательский заголовок в собственный шаблон плагина, не используя директорию темы
- Шаг 1: Создание пользовательского заголовка в плагине
- Шаг 2: Создание пользовательской функции для подключения заголовка
- Шаг 3: Интеграция пользовательской функции в шаблон
- Заключение
Вопрос или проблема
Существует много документации о том, как создать пользовательские заголовки для темы. Например, если я хочу добавить заголовок с именем:
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, такие решения улучшают совместимость и позволяют более гибко настраивать платформу в соответствии с бизнес-требованиями.