it-roy-ru.com

Могу ли я использовать функцию require () в файле шаблона?

В моем файле шаблона я хочу включить библиотеку. Я загрузил библиотеку в папку с темой, а внутри папки с темой находится мой пользовательский файл шаблона. В моем файле пользовательского шаблона у меня есть require 'OAuth2/Client.php';, но когда я загружаю страницу, которая использует шаблон, он дает мне это:

Предупреждение: требуется (OAuth2/Client.php): не удалось открыть поток: нет такого файла или каталога в /home/healthf0/public_html/wp-content/themes/healthfitcorpwell/single-iframe.php в строке 4

Очевидно, что файл существует, я вижу, что он сидит там по FTP. Почему это говорит мне это?

1
Alex

Вы видите эту ошибку, потому что вы requireing файл с относительным путем. Как отметил @Mark Kapulun в комментариях, вы не должны использовать относительные пути при requireing файлах. Вместо этого вы хотите быть явным и использовать абсолютные пути.

Используйте get_template_directory () который возвращает

Абсолютный путь к каталогу текущей темы (без косой черты)

В вашем файле шаблона оператор require будет выглядеть так:

require( get_template_directory() . '/path/from/theme/root/to/file.php');

Или get_stylesheet_directory(), если вы делаете дочернюю тему. док

Обновить:

Как отметил @Jack Johansson в своем ответе, вы также можете рассмотреть возможность использования require_once вместо этого. Это защитит вас от ошибок, вызванных несколькими включениями файла. Смотрите этот ответ для более подробной информации.

4
DaveLak

Да, но использование относительных путей не допускается. Вы всегда хотите абсолютные пути. Это можно сделать следующим образом:

<?php require( get_stylesheet_directory() . '/OAuth2/Client.php'); ?>

get_stylesheet_directory() вернет абсолютный путь, где style.css находится для темы. Это НЕ поместит завершающий / на это все же.

1
Cedon

Вы можете использовать get_template_directory(), чтобы получить абсолютный путь к каталогу вашего шаблона. Например, если ваш php-файл находится в /my-theme/OAuth2/Client.php, используйте:

require_once(get_template_directory().'/OAuth2/Client.php');

Помните, что НЕ используйте относительный файл PHP и ​​не обращайтесь к нему напрямую в целях безопасности. Кроме того, вы должны использовать это условие в своем файле client.php, чтобы сделать его более безопасным:

if ( ! defined( 'ABSPATH' ) ) {
    exit('No script rookies, please.');
}

Это не разрешает прямой доступ к вашему файлу PHP.

Я также хотел бы использовать require_once вместо require, чтобы убедиться, что он не вызовет никакой ошибки, если я случайно включу его в другое место.

1
Jack Johansson