Как напрямую получить доступ к PHP-файлу, расположенному в папке темы?
У меня есть файл в папке моей темы с названием "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, похоже, ничего не изменило.
Есть идеи, что может быть причиной?

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

Используете ли вы RewriteRule
в файле .htaccess? В таком случае у вас должна быть возможность напрямую обращаться к PHP-файлам. Первые две строки с RewriteCond
гарантируют, что переадресация на index.php
WordPress не произойдет, если файл или директория существуют.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /your-wp-site/index.php [L]

Вам необходимо создать пользовательский шаблон 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-файл вызывается как запись или страница.
Надеюсь, это поможет!
