1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
<?php
namespace SIW\Widgets;
use SIW\HTML;
class Calendar extends Widget {
protected $widget_id ='calendar';
protected $widget_dashicon = 'calendar';
protected function set_widget_properties() {
$this->widget_name = __( 'Agenda', 'siw');
$this->widget_description = __( 'Toont eerstvolgende evenementen', 'siw' );
}
public function get_widget_form() {
$widget_form = [
'title' => [
'type' => 'text',
'label' => __( 'Titel', 'siw'),
'default' => __( 'Agenda', 'siw' ),
],
];
return $widget_form;
}
public function get_content( array $instance, array $args, array $template_vars, string $css_name ) {
$events = $this->get_upcoming_events();
if ( empty( $events ) ) {
$content = '<p>' . esc_html__( 'Er zijn momenteel geen geplande activiteiten.', 'siw' ) . '</p>';
return $content;
}
foreach ( $events as $event ) {
ob_start();
?>
<h5 class="title">
<?= HTML::generate_link( $event['permalink'], $event['title'], [ 'class' => 'link' ] ) ?>
</h5>
<span class="duration" >
<?= esc_html( $event['date_range'] );?> <br/>
<?= esc_html( $event['start_time'] . ' - ' . $event['end_time'] );?><br/>
</span>
<span class="location">
<?= esc_html( $event['location'] . ', ' . $event['city'] );?>
</span>
<?php
$event_list[] = ob_get_clean();
$json_ld[] = $event['json_ld'];
}
$content = HTML::generate_list( $event_list );
$content .= implode( SPACE, $json_ld );
$content .= '<p class="page-link">' . HTML::generate_link( get_page_link( siw_get_option( 'events_archive_page' ) ), __( 'Bekijk de volledige agenda.', 'siw' ) ) . '</p>';
return $content;
}
protected function get_upcoming_events() {
$events = get_transient( 'siw_upcoming_events' );
if ( false === $events ) {
$events = siw_get_upcoming_events( 2 );
set_transient( 'siw_upcoming_events', $events, HOUR_IN_SECONDS );
}
return $events;
}
}