Как напрямую получить доступ к PHP-файлу, расположенному в папке темы?

16 июл. 2012 г., 19:27:22
Просмотры: 23K
Голосов: 7

У меня есть файл в папке моей темы с названием "test.php".

Когда я перехожу по адресу www.mysite.com/wp-content/themes/my-theme/folder/test.php, загружается тема, что, как я полагаю, является 404 ошибкой, обработанной WordPress. Если я изменю расширение файла на test.html, то могу получить к нему доступ без проблем.

Я попытался добавить следующий код в файл functions.php (чтобы добавить правило перезаписи):

add_rewrite_rule( 'test.php$', $relative_directory . '/folder/test.php [L]', 'top' );

но даже наличие правила в htaccess, похоже, ничего не изменило.

Есть идеи, что может быть причиной?

php
6
Комментарии

Вообще не стоит напрямую загружать php-файлы. Что именно должен делать этот файл? Скорее всего, есть более правильный способ реализовать это.

EAMann EAMann
16 июл. 2012 г. 20:39:00

У меня есть PHP-файл, который я использую для получения данных из базы данных и передачи их через AJAX, но сейчас при переходе на этот файл просто отображается 404 ошибка WordPress.

Gazillion Gazillion
16 июл. 2012 г. 20:52:40

WordPress может получить данные за вас и имеет встроенную поддержку AJAX. Использование WordPress для доступа к данным даёт дополнительные преимущества в виде кэширования, санитизации, экранирования и всего того, что можно делать с $wpdb.

EAMann EAMann
16 июл. 2012 г. 22:09:17

Как ограничить ваши ajax-запросы папкой темы? Я не понимаю, почему их нужно выносить за её пределы, когда всё остальное можно определить внутри.

Gazillion Gazillion
17 июл. 2012 г. 18:48:05

Вы регистрируете ajax-запросы в functions.php, используя фильтр. Затем вы делаете вызов к admin-ajax.php, и WordPress передаёт его дальше. В Codex есть пример для плагина, но для тем это работает точно так же.

EAMann EAMann
17 июл. 2012 г. 19:29:25

Извините, я неправильно прочитал запись в Codex. Файл admin-ajax вызывается, когда поступает ajax-запрос.

Gazillion Gazillion
17 июл. 2012 г. 20:43:18
Показать остальные 1 комментариев
Все ответы на вопрос 3
0

Если вы используете правильный URL для доступа к файлу, всё обрабатывается на уровне веб-сервера, и WordPress вообще не запускается, поэтому решения на основе WP, такие как изменение правил перезаписи, не помогут.

Скорее всего, существует какая-то конфигурация веб-сервера, которая отправляет 404 при любом доступе к php-файлам в этой папке (попробуйте проверить, возвращают ли другие php-файлы там тоже 404). Возможно, вы сможете исправить конфигурацию веб-сервера в соответствии с вашими потребностями, но, как отметил @EAMann, это не правильный способ написания AJAX для WordPress.

30 нояб. 2012 г. 08:15:04
1

Используете ли вы RewriteRule в файле .htaccess? В таком случае у вас должна быть возможность напрямую обращаться к PHP-файлам. Первые две строки с RewriteCond гарантируют, что переадресация на index.php WordPress не произойдет, если файл или директория существуют.

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /your-wp-site/index.php [L]
16 июл. 2012 г. 20:38:52
Комментарии

Я написал эту строку внизу файла .htaccess, и это сломало остальную часть сайта. Не могу сказать, что действительно понимаю почему, я немного озадачен :-/

Gazillion Gazillion
16 июл. 2012 г. 20:51:51
0

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

Вы также можете открыть файл "page.php" в директории вашей текущей темы, сохранить его как "test.php" в той же директории и вставить весь содержимое вашего PHP-кода из "test.php" внутрь <div> нового файла "test.php".

Примерно так:

<main id="main" class="site-main" role="main">
<?php
// Ваш PHP-код здесь!
?>
</main>

Это показывает только базовый <div> элемент, который вам понадобится. Если вам нужно отображать другой контент сайта вместе с test.php, вам потребуется создать файл content-test.php в директории "template-parts" вашей темы.

Аналогично, откройте "content-page.php" на этот раз, сохраните его как "content-test.php" в директории "template-parts" и вставьте код из test.php внутрь <div>, где это должно отображаться.

Вернитесь к новому файлу "test.php" и замените строку:

get_template_part( 'template-parts/content', 'page' );

на:

get_template_part( 'template-parts/content', 'test' );

Недостаток этого метода в том, что при обновлении WordPress этот файл может быть изменён или удалён, в отличие от первого варианта, где PHP-файл вызывается как запись или страница.

Надеюсь, это поможет!

27 февр. 2019 г. 00:10:54