Я пытаюсь реализовать фид информации из типа персонализированного события Event в формате JSON, который будет использоваться в реализации FullCalendar, в значительной степени, как описано здесь . Единственное, что я хотел изменить, это создать реальный фид WordPress для генерации вывода JSON, чтобы избежать взлома wp-load.
Это код: https://gist.github.com/1600619
Мне удается получить допустимый результат, если я перейду к example.com?feed=json, но я думаю, что запрос вызывает предупреждение FullCalendar от его фактического разбора. Я надеялся, что наличие фида с правильным URL-адресом, например example.com/feed/json, исправит его, но это доставит мне всего лишь 404.
Запрос AJAX запрашивал даты, которые он должен отображать. При использовании Lazy fetching set, если вы переключитесь с просмотра на месяц или неделю или день, он не станет беспокоиться о том, чтобы сделать другой запрос, так как ему это не нужно. Это описано в полной документации .
Что касается использования этого метода, см. Этот вопрос о том, как правильно получить URL-адрес admin-ajax.php.
Затем вам необходимо правильно установить источник полнокадров, а затем определить действие ajax. Из моего модуля Event Organiser
выведено следующее. Так что не стесняйтесь носа, чтобы получить детали (вы захотите использовать frontend.js
в папке js и event-organiser-ajax.php
в папке event-organiser-ajax.php
).
Источник события
jQuery(".eo-fullcalendar").fullCalendar({ lazyFetching: 'true', events: function(start, end, callback) { jQuery.ajax({ url: MYAJAX.url+"?action=mycalendaraction", dataType: 'JSON', data: { start: jQuery.fullCalendar.formatDate(start, 'yyyy-MM-dd'), end:jQuery.fullCalendar.formatDate(end, 'yyyy-MM-dd') }, success: function(data) { callback(data); } }) } });
По умолчанию начальные и конечные даты являются отметками времени, но мой запрос требовал его в формате ГГГГ-ММ-ДД. MYAJAX.url
– это URL-адрес admin-ajax.php, который вы задали, как объяснено в связанном вопросе, с помощью wp_localize_script
.
Наконец, вам необходимо добавить соответствующие действия для обработки запроса:
if ( isset( $_REQUEST['action'] ) AND 'mycalendaraction' === $_REQUEST['action'] ) { //For logged in users. do_action( "wp_ajax_{$_REQUEST['action']}" ); // For non-logged in users: do_action( "wp_ajax_nopriv_{$_REQUEST['action']}" ); } add_action( 'wp_ajax_mycalendaraction', 'get_my_events' ); add_action( 'wp_ajax_nopriv_mycalendaraction', 'get_my_events' ); function get_my_events() { //$_GET['start'] the start date //$_GET['end'] the end date //perform query //Let $events_array be the array of events with each event being an appropriate array (for instance with 'title','start','end','allDay' keys - see fullcalendar documentation). //Echo result and exit echo json_encode($event_sarray); exit; }
В приведенном выше примере я предполагаю, что календарь предназначен как для зарегистрированных пользователей, так и для незарегистрированных пользователей (следовательно, оба действия). Вы также хотите выполнить некоторые проверки nonce (см. Связанный вопрос). Обратите внимание, что действие такое же, как установлено в URL-адресе ajax раздела «Источник события».
То, что должно быть включено в каждый массив событий, приведено в документации fullcalendar в разделе «Объект события». На стороне javascript ассоциативный массив (т. Е. Событие) получают как объект со значениями, заданными значениями в массиве: Ie event['key']
становится event.key
Отказ от ответственности: приведенный выше код был изменен, чтобы сделать все более четким и поэтому не был протестирован.