Пользовательский ретранслятор JSON

Я пытаюсь реализовать фид информации из типа персонализированного события Event в формате JSON, который будет использоваться в реализации FullCalendar, в значительной степени, как описано здесь . Единственное, что я хотел изменить, это создать реальный фид WordPress для генерации вывода JSON, чтобы избежать взлома wp-load.

Это код: https://gist.github.com/1600619

Мне удается получить допустимый результат, если я перейду к example.com?feed=json, но я думаю, что запрос вызывает предупреждение FullCalendar от его фактического разбора. Я надеялся, что наличие фида с правильным URL-адресом, например example.com/feed/json, исправит его, но это доставит мне всего лишь 404.

Solutions Collecting From Web of "Пользовательский ретранслятор JSON"

Запрос 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

Отказ от ответственности: приведенный выше код был изменен, чтобы сделать все более четким и поэтому не был протестирован.