ios26-calendar/
ios26-calendar.php
includes/
class-ios26-events.php
class-ios26-elementor-register.php
widget-ios26-calendar.php
assets/
css/style.css
js/calendar.js
esc_url_raw( rest_url() ),
'nonce' => wp_create_nonce( 'wp_rest' ),
) );
}
// REST route to get events by date (YYYY-MM-DD)
function ios26_register_rest_routes() {
register_rest_route( 'ios26/v1', '/events', array(
'methods' => 'GET',
'callback' => 'ios26_get_events_by_date',
'permission_callback' => '__return_true',
'args' => array(
'date' => array( 'required' => true ),
),
) );
}
function ios26_get_events_by_date( $request ) {
$date = sanitize_text_field( $request->get_param( 'date' ) );
$args = array(
'post_type' => 'ios26_event',
'posts_per_page' => -1,
'meta_query' => array(
array(
'key' => 'ios26_event_date',
'value' => $date,
'compare' => '=',
),
),
);
$q = new WP_Query( $args );
$events = array();
while ( $q->have_posts() ) {
$q->the_post();
$events[] = array(
'id' => get_the_ID(),
'title' => get_the_title(),
'content' => apply_filters( 'the_content', get_the_content() ),
'date' => get_post_meta( get_the_ID(), 'ios26_event_date', true ),
'time' => get_post_meta( get_the_ID(), 'ios26_event_time', true ),
'location' => get_post_meta( get_the_ID(), 'ios26_event_location', true ),
);
}
wp_reset_postdata();
return rest_ensure_response( $events );
}
'Eventos do Calendário',
'singular_name' => 'Evento do Calendário',
);
$args = array(
'label' => 'Eventos do Calendário',
'labels' => $labels,
'public' => true,
'show_in_menu' => true,
'supports' => array( 'title', 'editor' ),
'menu_icon' => 'dashicons-calendar-alt',
);
register_post_type( 'ios26_event', $args );
}
public function add_meta_boxes() {
add_meta_box( 'ios26_event_meta', 'Detalhes do Evento', array( $this, 'render_meta_box' ), 'ios26_event', 'normal', 'high' );
}
public function render_meta_box( $post ) {
wp_nonce_field( 'ios26_event_save', 'ios26_event_nonce' );
$date = get_post_meta( $post->ID, 'ios26_event_date', true );
$time = get_post_meta( $post->ID, 'ios26_event_time', true );
$location = get_post_meta( $post->ID, 'ios26_event_location', true );
?>
').addClass('day-cell inactive').text('');
grid.append(cell);
}
for(var d=1; d<=daysInMonth; d++){
var cell = $('
').addClass('day-cell').attr('data-day', d).text(d);
var isoDate = year + '-' + String(month+1).padStart(2,'0') + '-' + String(d).padStart(2,'0');
(function(cell, isoDate){
$.ajax({
url: IOS26_CALENDAR.root + 'ios26/v1/events',
method: 'GET',
data: { date: isoDate },
beforeSend: function(xhr){ xhr.setRequestHeader('X-WP-Nonce', IOS26_CALENDAR.nonce); }
}).done(function(data){
if(data && data.length){
cell.addClass('has-event');
cell.data('events', data);
}
});
})(cell, isoDate);
var today = new Date();
if(d==today.getDate() && month==today.getMonth() && year==today.getFullYear()){
cell.addClass('today');
}
grid.append(cell);
}
}
IOS26Calendar.prototype.prevMonth = function(){ this.date.setMonth(this.date.getMonth()-1); this.render(); }
IOS26Calendar.prototype.nextMonth = function(){ this.date.setMonth(this.date.getMonth()+1); this.render(); }
IOS26Calendar.prototype.onClickDay = function(e){
var cell = $(e.currentTarget);
var events = cell.data('events') || [];
var isoDate = this.date.getFullYear() + '-' + String(this.date.getMonth()+1).padStart(2,'0') + '-' + String(cell.data('day')).padStart(2,'0');
if(events.length===0){
var self = this;
$.ajax({
url: IOS26_CALENDAR.root + 'ios26/v1/events',
method: 'GET',
data: { date: isoDate },
beforeSend: function(xhr){ xhr.setRequestHeader('X-WP-Nonce', IOS26_CALENDAR.nonce); }
}).done(function(data){
self.showEventsModal(isoDate, data);
});
} else {
this.showEventsModal(isoDate, events);
}
}
IOS26Calendar.prototype.showEventsModal = function(date, events){
var modal = this.root.find('.ios26-modal');
var body = modal.find('.ios26-modal-body');
body.empty();
body.append('
Eventos — ' + date + '
'); if(events.length===0){ body.append('Nenhum evento nesta data.
'); } events.forEach(function(ev){ var el = $('');
el.append('
'+ ev.title +'
'); if(ev.time) el.append('Hora: '+ ev.time +'
'); if(ev.location) el.append('Local: '+ ev.location +'
'); el.append(''+ ev.content +'
');
body.append(el);
});
modal.attr('aria-hidden', 'false');
}
IOS26Calendar.prototype.closeModal = function(){ this.root.find('.ios26-modal').attr('aria-hidden','true'); }
$(document).ready(function(){
$('.ios26-calendar-root').each(function(){ new IOS26Calendar( $(this) ); });
});
})(jQuery);
CONTATOS
- Av. Leonardo Malcher, 1728 - Praça 14 de Janeiro, Manaus - AM, 69010-170
- (92) 98119-8899
- madrigalamazonas@uea.edu.br
- Segunda e quarta-feira - De 12h às 13:30h