Во-первых, я попробовал несколько разных предложений от других пользователей stackoverflow, но мне не повезло.
Я пытаюсь создать своего рода api изнутри плагина. Задача состоит в том, чтобы внешняя система вызывала URL-адрес внутри моего плагина, чтобы он инициировал внутреннюю процедуру.
В настоящее время у меня есть класс, который имеет конструктора. Это внутри этого конструктора.
add_action( 'init', 'my_rewrite' ); function my_rewrite() { global $wp_rewrite; $plugin_url = plugins_url( 'my-api.php', __FILE__ ); $plugin_url = substr( $plugin_url, strlen( home_url() ) + 1 ); add_rewrite_rule('/my-api/(.*)', $plugin_url ,'top'); $wp_rewrite->flush_rules(true); }
Затем он генерирует RewriteRule в моем файле htaccess.
RewriteRule ^/my-api/(.*) /wp-content/plugins/my-api/classes/my-api.php [QSA,L]
Ниже приведен весь файл .htaccess для контекста
# BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteRule ^/slurp-api/(.*) /wp-content/plugins/slurp/classes/my-api.php [QSA,L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPress
По какой-либо причине, когда я посещаю site.dev/my-api, я вижу страницу 404, а не инструкцию echo, которая должна запускаться из my-api.php
Сайт-разработчик запускается через mamp pro, если это какая-то помощь.
Любые указания относительно того, почему этот переписывать не играет справедливость, будут очень признательны.
благодаря
Удалите переднюю косую черту с исходного запроса
RewriteRule ^my-api/(.*) /wp-content/plugins/my-api/classes/my-api.php [QSA,L]
И убедитесь, что файл my-api.php
существует в месте, которое вы my-api.php
перезаписи:
/wp-content/plugins/my-api/classes/my-api.php
Чтобы не преднамеренно дать ему несуществующую цель.
Как отмечает @Starkeen в комментариях, вы также можете удалить ведущую косую черту с целью, как это
RewriteRule ^my-api/(.*) wp-content/plugins/my-api/classes/my-api.php [QSA,L]
Итак, после долгих переделок я натолкнулся на правильный ответ. Я изменил эту строку на
add_rewrite_rule('my-api', $plugin_url ,'top');
Я пробовал много вариаций, но этот, наконец, работал. Спасибо за помощь.