Я пытаюсь создать пользовательскую конечную точку API в WordPress, и мне нужно перенаправить запросы на виртуальную страницу в корне WordPress на фактическую страницу, которая поставляется с моим плагином. Таким образом, в основном все запросы к одной странице фактически направляются на другую.
Пример:
http://mysite.com/my-api.php
=>http://mysite.com/wp-content/plugins/my-plugin/my-api.php
Смысл этого состоит в том, чтобы сделать URL-адрес для конечной точки API как можно более коротким (аналогично тому, http://mysite.com/xmlrpc.php
чтобы поставлять фактический файл конечной точки API с помощью плагина, а не требовать от пользователя перемещения файлов в их установке и / или взломать ядро). ,
Моим первым ударом было добавить пользовательское правило перезаписи. Однако у этого были две проблемы.
- Конечная точка всегда имела косую черту. Это стало
http://mysite.com/my-api.php/
- Мое правило переписывания применялось только частично. Он не будет перенаправлять на
wp-content/plugins...
, он будет перенаправлять наindex.php&wp-content/plugins...
. Это приводит к тому, что WordPress отображает либо ошибку «страница не найдена», либо просто значение по умолчанию на главной странице.
Идеи? Предложения?
источник
get_query_vars()
в my-api.php. Я проверил, какие переменные загружены. И единственная переменная, которая установлена,WP object
называется$wp
. Как я могу получить доступ или преобразовать это вWP_Query
объект, чтобы я мог получить доступ к переданным переменным сget_query_vars()
?include
файл, он выполняется в текущей области. В данном случае этоwpse9870_parse_request
функция, которая имеет только$wp
параметр. Возможно, что глобальный$wp_query
объект еще не был установлен, поэтомуget_query_var()
не будет работать. Тем не менее, вам повезло:$wp
класс, который содержитquery_vars
член, который вам нужен - я использую его сам в приведенном выше коде.Это сработало для меня. Я никогда не касался API переписывания, но всегда готов подтолкнуть себя в новых направлениях. Следующее работает на моем тестовом сервере для 3.0, расположенном в подпапке localhost. Я не вижу проблем, если WordPress установлен в веб-корне.
Просто поместите этот код в плагин и загрузите файл с именем "taco-kittens.php" прямо в папку плагина. Вам нужно будет написать жесткий флеш для ваших постоянных ссылок. Я думаю, что они говорят, что лучшее время для этого - активация плагина.
С наилучшими пожеланиями, Майк
источник
add_rewrite_rule( 'taco-kittens', 'wp-content/plugins/taco-kittens.php', 'top' );
Есть ли причина не делать что-то подобное вместо этого?
http://mysite.com/?my-api=1
Затем просто подключите ваш плагин к 'init' и проверьте переменную get. Если он существует, сделайте то, что нужно вашему плагину, и умрите ()
источник
Возможно, я не совсем понимаю ваши вопросы, но решит ли ваш простой код короткий номер?
шаги:
Новая страница действует как конечная точка API, и ваш шорткод отправляет запросы на код вашего плагина по адресу http://mysite.com/wp-content/plugins/my-plugin/my-api.php.
(конечно, это означает, что my-api.php будет иметь определенный шорткод)
Вероятно, вы можете автоматизировать шаги 1 и 2 с помощью плагина.
источник
Я еще не так много переписывал, так что это, вероятно, немного грубо, но, похоже, работает:
Это работает, если вы подключите это в «generate_rewrite_rules», но должен быть лучший способ, так как вы не хотите переписывать .htaccess при каждой загрузке страницы.
Похоже, я не могу перестать редактировать свои собственные сообщения ... скорее всего, вам следует активировать обратный вызов и вместо этого ссылаться на глобальный $ wp_rewrite. А затем удалите запись из non_wp_rules и снова выведите ее в .htaccess, чтобы отключить обратный вызов.
И, наконец, запись в .htaccess должна быть немного более сложной, вам нужно только заменить там раздел WordPress.
источник
У меня было похожее требование, и я хотел создать несколько конечных точек на основе уникальных слагов, которые указывают на контент, сгенерированный плагином.
Посмотрите на источник для моего плагина: https://wordpress.org/extend/plugins/picasa-album-uploader/
Техника, которую я использовал, начинается с добавления фильтра для
the_posts
проверки входящего запроса. Если плагин должен обработать его, генерируется фиктивная запись и добавляется действие дляtemplate_redirect
.Когда
template_redirect
вызывается действие, оно должно привести к выводу всего содержимого отображаемой страницы и завершению, или оно должно возвращаться без генерируемого вывода. Посмотрите код,wp_include/template-loader.php
и вы поймете, почему.источник
Я использую другой подход, который заключается в том, чтобы заставить домашнюю страницу загружать пользовательский заголовок, контент и шаблон страницы .
Решение очень простое, так как оно может быть реализовано, когда пользователь переходит по дружественной ссылке, такой как http://example.com/ ? Plugin_page = myfakepage
Это очень легко реализовать и должно допускать неограниченное количество страниц.
Код и инструкции здесь: Создайте пользовательскую / поддельную / виртуальную страницу Wordpress на лету
источник
Я использую подход, аналогичный описанному выше Хави Эстеве, который перестал работать из-за обновления WordPress, насколько я мог судить во второй половине 2013 года.
Это подробно описано здесь: https://stackoverflow.com/questions/17960649/wordpress-plugin-generating-virtual-pages-and-using-theme-template
Ключевой частью моего подхода является использование существующего шаблона, чтобы получающаяся страница выглядела как часть сайта; Я хотел, чтобы он был максимально совместим со всеми темами, надеюсь, в разных версиях WordPress. Время покажет, был ли я прав!
источник
это пример готового продукта, сначала создайте класс виртуальной страницы:
На следующем шаге подключите
template_redirect
действие и обработайте вашу виртуальную страницу, как показано нижеисточник