Як керувати Ajax дзвінками та JSON в wordpress


13

У мене є власний тип публікації, до якого я хочу отримати доступ через jQuery - бажано за допомогою JSON.

Тож спочатку все. створити функцію, яка повертає / повторює json, досить просто, але як би я отримав доступ до неї через jquery.

як пише Майк у цьому питанні , він - наскільки я розумію - розміщує це в корені wordpress. що зробить його доступним за допомогою імені файлу php - але чи рекомендується це? Я вважаю за краще помістити його в папку плагінів.

Я спробував прочитати кодекс WordPress, але спосіб обробки Ajax-дзвінків мене просто збиває з пантелику, оскільки ви відправляєте кожен виклик ajax на admin-ajax.php, навіть якщо це не сторінка адміністратора?

Чи може хтось, будь ласка, виправити проблеми, які у мене є?

/ Буря

редагувати

Проблема у мене полягала в розумінні того, як потрібно робити дзвінки ajax у wordpress, а також де розмістити ваш php та js-код для здійснення / обробки дзвінків.

В іншому питанні, з яким я пов’язаний, ви створили функцію розміщення файлу в корені wp - я цього не хочу робити. Але я тепер навчився використовувати wp_ajax_ (nopriv _) [action] і можу ефективно отримувати доступ до json, який я створюю. Проблема, що залишається, - де мені слід розмістити JS для здійснення дзвінка. Я хочу розмістити його у файлі js плагінів, але оскільки це має бути представлено на сторінці, а не на сайті адміністратора, ajaxurl не визначено, тому мені доводиться лунати за допомогою php.

echo admin_url('admin-ajax.php');

Тож виникає питання, як я повинен поєднувати цей php з javascript, і як мені потім запхнути його, бачачи, що це не файл чи сценарій.


Я хотів би відредагувати назву вашого питання, щоб дати більш описовий заголовок, але після прочитання я все ще не на 100% впевнений, що таке ваше питання. Ви просто запитуєте, як отримати доступ до каналу JSON, не пов'язаного із типовими публікаціями (чи CPT насправді не імпортує до вашого питання?) І чи важливо, щоб він не знаходився в корені? Це для функцій адміністратора? Можливо, це допоможе, якщо ви поясните, що ви насправді намагаєтеся досягти з точки зору кінцевого користувача, крім технічного підходу, з яким ви боретеся?
MikeSchinkel

Так, я можу стверджувати, що назва не є найбільш описовим. Я просто щось поставив туди, бо спочатку я розмістив з ще гіршим. Відредагований пост з додатковою інформацією.
Буря

Я просто вклав спеціальний тип публікації, оскільки плагін json-api, який здається популярним, насправді не охоплює типи користувальницьких повідомлень.
Буря

Відповіді:


17

Ajax Handler

Це справді трохи заплутано, що обробник Ajax знаходиться в wp-admin/каталозі, але так, ви можете і повинні використовувати його і для запитів, які не мають адміністратора. Потім ви реєструєте обробник для wp_ajax_nopriv_[action]гачка, а не звичайний wp_ajax_[action]. У цьому випадку вам потрібно лише дотримуватися перших рядківadmin-ajax.php , оскільки запит, зроблений користувачем, який не ввійшов у систему, вже залишить сторінку навколо рядка 50.

Так зареєструвати функцію для гачка wp_ajax_nopriv_get_custom_post_data, і він буде викликаний , якщо ви попросите admin-ajax.phpз actionнабором параметрів в get_custom_post_data. Не забудьте зателефонувати die()в кінці свого обробника самостійно, інакше die(-1)повернення за замовчуванням повернеться. А також зареєструйте увійшли в систему версію wp_ajax_get_custom_post_data(до тієї ж функції обробника, немає проблем), оскільки якщо ви увійдете на свій сайт, ви не потрапите на noprivгачок.

Налаштування сервера на Javascript

Трюк для надсилання даних конфігурації на стороні сервера (наприклад, admin-ajax.phpURL) wp_localize_script(). Ви передаєте йому масив ключів і значень, які будуть включені у верхню частину сторінки. Це, ймовірно, спочатку створено лише для локалізованих рядків, але ви можете використовувати їх і для передачі даних конфігурації.

wp_localize_script('storm_json_config', 'storm_config', array(
    'ajaxurl' => admin_url('admin-ajax.php'),
));

storm_json_config- це ім'я ручки (якщо ви хочете зняти його згодом), storm_configце ім'я об'єкта Javascript, який буде містити ваші дані. Отже, ваш статичний файл Javascript може містити такий рядок jQuery.post(storm_config.ajaxurl, ...).

Дивіться також відповідь бюлетеня на подібне запитання .

Статичний Javascript з плагіну реж

Щоб завантажити статичний файл Javascript з вашого власного режиму плагіна, ви використовуєте wp_enqueue_script(). Це виглядатиме приблизно так:

wp_enqueue_script('storm_json', plugin_dir_url(__FILE__) . 'js/json.js', array('jquery'), '20101105');

Де storm_jsonзнову ім'я ручки, ви даєте посилання на файл, потім залежності (може бути null), а потім номер версії, який буде доданий після запиту, щоб перемогти кеш браузера на оновленнях.


чудова відповідь. Це було те, що мені було цікаво, і я, здається, змусив його працювати. Тепер я можу отримати доступ до /wp-admin/admin-ajax.php?action= evidenceaction] та отримати результат json. Моя проблема зараз полягає в тому, де поставити js для здійснення дзвінка ajax. Оскільки мені потрібно поставити echo admin_url ('admin-ajax.php'); як URL, я не можу помістити його у свій файл плагінів js. То як би я пішов про завоювання цього? Я просто не хочу надрукувати сценарій на середині сторінки.
Буря

@Storm: я розширив свою відповідь, за допомогою wp_localize_script()якої ви можете надсилати дані конфігурації з боку сервера до браузера. (Невелика порада. Якщо ви додасте @ім’я користувача, ця особа отримає сповіщення про вашу відповідь. Тому @Mike: I updated the titleпереконайтеся, що він побачить ваш коментар)
Ян Фабрі

Дякую купу січня. Зараз я думаю, що я розумію весь пакет. Мені доведеться трохи пограбувати з усім цим, щоб зрозуміти це повністю, але ти дуже допомогла! Відповідь прийнята =) btw дякую за примітку @. Але коли я коментую вашу відповідь зараз, ви все одно отримаєте попередження, чи не так?
Буря

@Storm: Так, попередження надсилається автору питання або відповіді, яку ви коментуєте, а також воно може перейти до іншого учасника, якого ви згадуєте в @-коментарі. Тож я отримав ваше повідомлення "безкоштовно", але ви не отримаєте його за це повідомлення, якби я вас не включив. Повне пояснення представлено на загальному мета-сайті мережі Stack Exchange.
Ян Фабрі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.