Для админки ajax запросы реализованы. Но не удалось найти как отправлять ajax запрос на сайте для клиентов.
Максимум что получилось сделать, это отправить на тот же admin-ajax.php, но пришлось указать add_action('wp_ajax_nopriv_****', '****');
Еще вопрос. возможно ли такой механизм реализовать для обычных запросов (не Ajax)?
Т.е. add_action('wp_info', myinfo'); чтобы сработал и перехватил обращение к странице site.ru/info (либо другой урл) но не wp-admin/admin-ajax.php?action=info
Максимум что получилось сделать, это отправить на тот же admin-ajax.php
Так и должно быть. Файл admin-ajax.php это обработчик для аякс-запросов. Отправляете на него, свой код вешаете на соответствующий хук. Сам хук идет в 2х вариантах - wp_ajax_* (для авторизованных пользователей) wp_ajax_nopriv_* (для неавторизованных). Это позволяет разделять функционал.
по второму вопросу я имел ввиду возможно ли написать хук для запроса типа site.ru/myfunc
и реализовать код в функции myfunc(){...} ну и желательно чтобы подключился шаблон index.php из темы.
например мне нужно вывести интерактивную карту на сайте. я не хочу создавать "страницу" и в нее ставить шорткод [map]. Мне удобнее было бы сразу хуком сказать что страница /map будет обрабатываться функцией function map()
Nemozar, это "подозрительно" напоминает обычный URL роутинг, которого в WP нет. Это вам не Symfony/Laravel/Lumen/whatever, тут он по-другому реализован.
Игорь Воротнёв, т.е. роутить только через страницы (посты) можно? и через шорткоды получается? как тут правильно реализовать. чтобы потом клиент (имеющий админку) не испортил какие то базовые/стандартные страницы.
Nemozar, роутинг вообще идет через rewrite_rules. Они регуляркой красивый урл преобразовывают в набор _GET переменных, которые потом парсятся как request, WP определяет какой WP_Query выполнять (с какими параметрами), как шаблон загружать в template_include и тд. В принципе, вполне можно сделать свой кастомный rewrite rule, потом по своим query_vars модифицировать запрос, шаблон (можно брать из папки плагина), отправлять необходимые заголовки (чтобы 404 не было, если вдруг) и тд. Все это решаемо. Вопрос в другом - зачем вам это понадобилсь? Какова причина нежелания использовать страницы? Какую боль вы пытаетесь этим решить? Нужны подробности задачи.
Игорь Воротнёв, не хочу чтобы плагин зависел от страниц, т.к. их администратор может удалить/добавить. Удалить шорткод с них и т.д.
Т.е. работоспособность плагина может страдать от этого.
Мне нужно реализовать сложный плагин, с запросом данных с апи других сайтов и отображения нужной информации. Будет идти интерактивный обмен с другим сайтом (предварительная запись).
поэтому думал описать свой страницы в роутинге (как оказывается его тут нет, точнее есть для стандартных механизмов) чтобы они были доступны всегда, вне зависимости от добавленых постов и шорткодов.
Просто есть механизм admin-ajax, но нет простого, не ajax роутинга. это немного меня и смутило. ajax запросы без проблем вызывать можно любые и в админке даже можно виртуальные страницы делать, роутинг есть. А для клиента только посты.
не хочу чтобы плагин зависел от страниц, т.к. их администратор может удалить/добавить. Удалить шорткод с них и т.д.
С таким же успехом он может удалить ваш плагин. Вопрос исключительно в документации. Впрочем, есть варианты:
- можно страницы с шорткодами создавать програмно.
- можно отключать визуальник вообще, чтобы клиент ничего не отредактировал, а вместо него выводить сообщение что "эта страница используется для Х, не трогайте ее а то все сломается".
- дополнительно можно перехватить удаление, чтоб наверняка. Даже кнопку удаления можно скрыть.
Мне нужно реализовать сложный плагин, с запросом данных с апи других сайтов и отображения нужной информации. Будет идти интерактивный обмен с другим сайтом (предварительная запись).
поэтому думал описать свой страницы в роутинге (как оказывается его тут нет, точнее есть для стандартных механизмов) чтобы они были доступны всегда, вне зависимости от добавленых постов и шорткодов.
Так создайте "пустые" страницы (см. выше), которые нельзя просто так грохнуть, и которые без контента и без редактора. И по их урлам подгружацте свои шаблоны (через template_include) из папки плагина. Имхо, так проще всего.
Просто есть механизм admin-ajax, но нет простого, не ajax роутинга. это немного меня и смутило. ajax запросы без проблем вызывать можно любые и в админке даже можно виртуальные страницы делать, роутинг есть. А для клиента только посты.
Я вот честно не совсем понял о чем вы. Либо я туплю, либо вы что-то путаете.