2015-09-27 5 views
0

Я пишу плагин WordPress с элементом AJAX - блоки HTML обрабатываются передним концом из плагина с использованием AJAX.Полностью настраиваемая страница в WordPress, сгенерированная плагином

У меня возникли трудности с объединением деталей здесь, и я подозреваю, что это просто вопрос терминологии. Как я могу реализовать страницу, полностью предоставленную плагином?

  • Содержание страницы будет HTML - плагин может генерировать это в ответ на параметры POST или GET.
  • Необходимо найти маршрут по этой странице. Маршрут не должен быть удобным для пользователя или стилем REST - только некоторый URI, который попадает в плагин. Есть ли способ зарегистрировать пользовательскую страницу с произвольным именем, не создавая ее как пост WP?
  • Я хотел бы, чтобы все это было самодостаточным в плагине, поэтому администратор не должен создавать должности или страницы или добавлять что-либо к теме.
  • В идеале я бы избегал любых URL-адресов, которые попадают в каталог wp-admin. Конечные пользователи здесь не принадлежат.
+0

Я нашел отличное объяснение, которое привело меня к решению здесь: https://willnorris.com/2009/06/wordpress-plugin-pet-peeve-2-direct-calls-to-plugin-files Я расскажу об этом в качестве ответа, но все равно было бы хорошо услышать, как может работать более слабый синтаксический анализ URL-адреса. – Jason

ответ

0

я настоятельно рекомендую со ссылкой на https://codex.wordpress.org/AJAX_in_Plugins#Ajax_on_the_Viewer-Facing_Side

Вы должны иметь PHP скрипт в каталоге подключаемого модуля, который возвращает то, что вы просите, и вы должны определить, что URL-адрес во время выполнения для справки в вашем AJAX. Вышеприведенная ссылка дает пример для enqueuing и использования wp_localize_script() для предоставления URL-адреса для вашего настраиваемого скрипта php.

wp_enqueue_script('ajax-script', 
     plugins_url('/js/my_query.js', __FILE__), array('jquery')); 

    // in JavaScript, object properties are accessed as 
    // ajax_object.ajax_url, ajax_object.we_value 
    wp_localize_script('ajax-script', 'ajax_object', 
      array('ajax_url' => plugins_url('/php/myapi.php')); 

файл JavaScript будет включен на каждой странице и будет прослушивать события на странице, которые требуют блока HTML, как вы описали.

Затем ваш файл myapi.php должен получить запрос, возможно, используя строку запроса, получить соответствующий контент из wordpress api и ответить указанным контентом, который ваш javascript будет внедрен на место.


Чтобы получить доступ к WordPress API, а также, хотя, у вас есть два варианта:

  1. Force WordPress для запуска, начиная с вашим файлом, с помощью including wp-load.php. Это, вероятно, не самый чистый путь.
  2. Настройте custom page or slug, чтобы перейти к плагину.

Я бы посоветовал второй вариант, и посоветовать слизняка, в этом случае вы можете найти это сообщение полезным: wp_rewrite in a WordPress Plugin


Из комментария Джейсона, на основе указанной выше ссылке:

Правила перезаписи упоминаются много, но на самом деле это отвлечение - они просто помогают сделать URL-адреса более «дружественными», что не было целью .Ключ: зарегистрируйте настраиваемый параметр GET; найдите этот параметр на ранней стадии процесса рендеринга страницы; если вы обнаружите, что установлен параметр , то вывод/эхо-материал и die(). Существует количество крючков, которые можно использовать для просмотра параметров, выбранных зависимости от того, сколько вы хотите, чтобы WP сначала настроил и обработал.

+0

Будет ли пользовательский 'myapi.php' запускаться полностью из контекста WordPress? Он должен получить доступ к параметрам WP, функциям, переходным процессам. Я не искал полностью автономный сценарий. 'wp_localize_script' является хорошей точкой для передачи данных в сценарии JS. – Jason

+0

@Jason хорошая точка, см. Мое редактирование – enigma

+0

Первый ответ здесь, что я использовал: http://stackoverflow.com/questions/2210826/wp-rewrite-in-a-wordpress-plugin/2487407 Правила перезаписи упоминаются как много, но на самом деле это отвлечение - они просто помогают сделать URL-адреса более «дружественными», что здесь не было целью. Ключ: зарегистрируйте настраиваемый параметр GET; ищите этот параметр в начале процесса рендеринга страницы; если вы обнаружите, что параметр установлен, то вывести/echo stuff и 'die()'. Существует несколько крючков, которые можно использовать для просмотра параметров, выбранных в зависимости от того, как вы хотите, чтобы WP сначала настроил и обработал. – Jason