Включите внешний файл PHP в пользовательский шаблон Wordpress
-
-
Взгляните на http://codex.wordpress.org/Integrating_WordPress_with_Your_Website должен ответить на ваш вопрос.Take a look at http://codex.wordpress.org/Integrating_WordPress_with_Your_Website should answer your question.
- 0
- 2013-08-26
- Mark Davidson
-
Вы можете использовать это.С какой проблемой вы столкнулись?You can use it. What's the problem are you facing?
- 1
- 2013-08-26
- Vinod Dalvi
-
привет,я только что скопировал свои файлы в папку wordpress и связал их правильно ... в любом случае,каков ответ на этот вопрос?Я просто получаю пустую белую страницуhi, i just copied my files inside the wordpress folder and linked them properly.. anyway, whats the answer on this question? I just get a blank white page
- 0
- 2013-08-26
- Jeremi Liwanag
-
Для ясности,вы пытаетесь включить файлы,которые находятся на внешнем сайте?Если да,то разрешают ли текущие разрешения сайтаphp-файлов общедоступный доступ для чтения к этим файлам?Just to be clear, you are trying to include files that are located on an external site? If so, do the current permissions of the php files site allow public read access to these files?
- 0
- 2014-02-13
- iyrin
-
6 ответ
- голосов
-
- 2014-03-25
Нет,вы не можете включать файлы PHP в тему указанным вами способом.
Чтобы понять почему,все,что нам нужно сделать,это проявить здравый смысл и базовое критическое мышление:
- Вы выполняете удаленный запрос к удаленному серверу,
include
не может этого сделать - Если бы каким-то чудом это сработало,у вас была бы серьезная уязвимость безопасности,как я мог бы сделать что-то вроде этого:
include( 'http://yoursite/wp-config.php' ); echo DB_PASSWORD;
. Представьте,как легко было бы взламывать сайты! Что меня остановит,включаяfacebook.com/index.php
? - Если даже в этом случае это каким-то образом сработало и было безопасно,представьте себе медлительность! Вы делаете запрос к серверу,а затем сервер делает еще один для заголовка,еще один для боковой панели и еще один для нижнего колонтитула,все это ожидание,кого это может беспокоить?
- Но,наконец,даже еслиinclude может делать удаленные запросы. Чего он не может,зачем ему возвращать код PHP? Не вернет ли он то,что выдает сервер,то есть завершенный html? Сервер запускает любой PHP,прежде чем он будет возвращен,поэтому PHP не будет в том,что вы включаете.
Нет,это невозможно. Но быстрое копирование и вставка кода вашего вопроса в PHP-скрипт с последующим быстрым визитом сказали бы вам это быстрее,чем кто-либо здесь.
Вместо этого вы можете включать файлы только из локальной файловой системы,в которой в настоящее время работает ваш сервер. Вы никогда не передадите URL в инструкцииinclude или require.
Итак,если я нахожусь вindex.php и в той же папке есть файл с именем sidebar.php,я бы добавил его следующим образом:
include('sidebar.php');
include
возвращает значение,если это не удалось. Семантика инструкцииinclude является общей базовой PHP и не по теме на этом сайте вопросов и ответов.Однако я оставил этот вопрос открытым,потому что вместо этого вы должны использовать функцию WordPress API,которая лучше,чем включать и требовать для того,что вам нужно.
Чтобы включить часть шаблона в тему,используйте:
get_template_part( 'partname' );
Эта функция также будет искать внутри дочерней или родительской темы указанную вами часть.
Например,в этом коде:
get_template_part( 'sidebar', 'first' );
Он будет искать и включать первые найденные из них:
- дочерняя тема
sidebar-first.php
- родительская тема
sidebar-first.php
- дочерняя тема
sidebar.php
- родительская тема
sidebar.php
Следует отметить,что для включения файлов шаблонов следует использовать толькоget_template_part. Не используйте его для включения файлов,таких как библиотеки,или других файлов PHP,которые не выводят HTML.
Я предлагаю вам прочитать следующие темы,прежде чем продолжить:
- функцииinclude и require в PHP.Net
- родительские и дочерние темы
- иерархия шаблонов и то,как WordPress выбирает,какой шаблон использовать
-
<?php php ?> <?php tag ?> <?php spam ?> <?php and ?> <?php why ?> <?php its ?> <?php bad ?>
get_template_part
-
WP_HTTP
API,в тех случаях,когда вам действительно нужно выполнять удаленный запрос к API. Здесь помогут такие функции,какwp_remote_get
иwp_remote_post
. - Отладка PHP. Ваши белые страницы - это фатальные ошибки PHP,но поскольку у вас настроено ведение журнала ошибок,чтобы скрыть их от внешнего интерфейса,они записываются в файл журнала ошибок,о котором вы не знаете. Найдите свой журнал ошибок,определите
WP_DEBUG
в своемwp-config.php
и установите плагин,такой как панель отладки или монитор запросов,это вам очень поможет. Убедитесь,что вы вызываетеwp_footer
в нижнем колонтитуле вашего шаблона.
No, you cannot include PHP files in a theme the way you indicated.
To see why, all we have to do is exercise some common sense and basic critical thinking:
- You would be doing a remote request to a remote server
include
cannot do this - If by some miracle it worked, you would have a major security exploit as I could then do something like this:
include( 'http://yoursite/wp-config.php' ); echo DB_PASSWORD;
. Imagine how easy it would be to hack websites! Whats to stop me includingfacebook.com/index.php
? - If even then it somehow worked, and it was secure, imagine the slowness! You make a request to the server, and then the server goes and makes another for the header, and another for the sidebar, and another for the footer, all that waiting, who could be bothered?
- But finally, even if include could make remote requests. Which it can't, why would it return PHP code? Won't it return what the server spits out, aka the finalised html? The server runs any PHP before it gets returned so there'd be no PHP in what your including..
So no, it's not possible. But a quick copy paste of the code in your question into a PHP script followed by a quick visit would have told you that quicker than anybody here.
Instead, you can only include files from the local file system your server is currently running on. You would never pass in a URL to an include or a require statement.
So if I'm in index.php, and there is a file in the same folder called sidebar.php, I would include it like this:
include('sidebar.php');
include
returns a value if this failed. The semantics of the include statement are general basic PHP and are off topic on this Q&A site.However I kept this question open because there is a WordPress API function you should be using instead that is better than include and require for what you need.
To include a template part in a theme, use:
get_template_part( 'partname' );
This function will also look inside a child or parent theme for the part you specified.
For example, in this code:
get_template_part( 'sidebar', 'first' );
It will look for and include the first it finds of these:
- child theme
sidebar-first.php
- parent theme
sidebar-first.php
- child theme
sidebar.php
- parent theme
sidebar.php
It should be noted, that you should only use get_template_part to include template files. Don't use it to include files such as libraries, or other PHP files that do not output html.
I suggest you read up on the following subjects before continuing:
- the include and require functions on PHP.Net
- parent and child themes
- the template hierarchy and how WordPress chooses which template to use
<?php php ?> <?php tag ?> <?php spam ?> <?php and ?> <?php why ?> <?php its ?> <?php bad ?>
get_template_part
- the
WP_HTTP
API, for those genuine times you really need to do a remote request to an API. Functions such aswp_remote_get
andwp_remote_post
will help here. - PHP Debugging. Your white pages are PHP Fatal errors, but because you have error logging set to hide it from the front end, it's being logged to an error log file you're unaware of. Find your error log, define
WP_DEBUG
in yourwp-config.php
and install a plugin such as debug bar or query monitor, these will help you enormously. Make sure you callwp_footer
in your templates footer though.
-
- 2014-02-13
Предположим,у вас есть этот файл:
Ваша установка wordpress размещается в корневой папке www,как и ваш сайт,а ваш header.php находится в папке www/includes.
В своей теме wordpress просто добавьте
& lt;?php include ('включает/header.php'); ?>
Когда WordPress читает файлы темы,он использует корневой путь.
suppose you have this cenario:
Your wordpress instalation is hosted on 'www' root folder as your site, and your header.php is on 'www/includes' folder.
In you wordpress theme, just add
<?php include('includes/header.php'); ?>
When WordPress reads theme files, it uses the root path.
-
- 2014-02-03
Вы не можете включать внешний ресурс в функции
include()
!Включить работает по внутренним путям сервера.Вы не можете указать URL-адрес,как хотите.Это проблема безопасности PHP!Вы можете использовать:
get_file_contents('http://your.url');
или используйте библиотеку Curl.
You cannot include an external resource on
include()
functions! Include works by server internal paths. You cannot include an url as you want. It's a PHP security problem!You can use:
get_file_contents('http://your.url');
or use a Curl library.
-
Пожалуйста,добавьте подробные пояснения к своим ответам,чтобы помочь пользователю понять вашу точку зрения.Please add a good deal of explanation to your answers to help the user understand your point.
- 1
- 2014-02-03
- Maruti Mohanty
-
- 2017-01-12
Когда я проверил основные файлы,я нашел следующий код для в файле
wp/wp-includes/general-template.php
для функцииget_header()
я нашел следующие строки
$templates[] = 'header.php'; locate_template( $templates, true );
Итак,я использую его в своем коде (
index.php
) вот так<?php get_header(); $myphpfile[] = 'grid.php'; locate_template( $myphpfile, true ); ?>
When i checked the core files following is the code i found for in the file
wp/wp-includes/general-template.php
for functionget_header()
i found following lines
$templates[] = 'header.php'; locate_template( $templates, true );
So I am using it in my code (
index.php
) like this<?php get_header(); $myphpfile[] = 'grid.php'; locate_template( $myphpfile, true ); ?>
-
- 2018-04-24
Для дочерней темы:
<?php echo get_stylesheet_directory_uri().'/subfoldername/add.php';?>
Вы можете использовать
For Parent Theme: get_template_directory() or get_template_directory_uri() For Child Theme: get_stylesheet_directory() or get_stylesheet_directory_uri()
For Child Theme:
<?php echo get_stylesheet_directory_uri().'/subfoldername/add.php';?>
You can use
For Parent Theme: get_template_directory() or get_template_directory_uri() For Child Theme: get_stylesheet_directory() or get_stylesheet_directory_uri()
-
- 2020-05-04
Возможно,это плохая форма для публикации такого старого вопроса,но недавно мне пришлось сделать что-то подобное,и я обнаружил этот результат,используя метод,который здесь не показан. Записываем это для будущих исследователей;).
Мой пример использования:
- Wordpress установлен в подкаталоге
- Я хотел включить элементы нижнего и верхнего колонтитула с родительского сайта,а не использовать wordpress для этих элементов.
Поскольку
include()
илиrequire()
могут использовать абсолютные пути к серверу (например:/var/www/vhosts/foo.bar/httpdocs/includes/baz.php
),мы можем использовать определение WordpressABSPATH
для генерации этого:include( dirname( ABSPATH ) . '/includes/header.php' );
это вернет
/var/www/vhosts/foo.bar/httpdocs/includes/baz.php
.Даже когда Wordpress находится в подкаталоге (например:
/var/www/vhosts/foo.bar/httpdocs/blog/
),dirname( ABSPATH )
дает нам корень документа независимо.Могут быть и другие способы сделать это,например,с помощью суперглобала
$_SERVER['DOCUMENT_ROOT']
,но я этого не исследовал.Might be poor form to post on such an old question, but I recently had to do something similar and found this result while using a method not shown here. Jotting it down for future explorers ;).
My use case was:
- Wordpress installed in subdirectory
- I wanted to include footer/header elements from the parent site, rather than using wordpress for these elements
Because
include()
orrequire()
can use absolute server paths (eg:/var/www/vhosts/foo.bar/httpdocs/includes/baz.php
), we can use Wordpress'ABSPATH
definition to generate this:include( dirname( ABSPATH ) . '/includes/header.php' );
this will return
/var/www/vhosts/foo.bar/httpdocs/includes/baz.php
.Even when Wordpress is in a subdirectory (eg:
/var/www/vhosts/foo.bar/httpdocs/blog/
),dirname( ABSPATH )
gives us the document root regardless.There might be other ways to do this, using the
$_SERVER['DOCUMENT_ROOT']
superglobal for example, but I didn't explore that.
Можно ли включить внешний файл PHP в настраиваемый шаблон?
Я пытаюсь добавить блог на свой сайт. У меня уже есть макет верхнего,нижнего колонтитула и боковой панели на моем сайте. Могу ли я использовать их в собственном шаблоне?
Я тоже пробовал: