Advertisement
  1. Code
  2. Plugins

Calendario de eventos de WordPress usando tipos de post personalizados y el calendario detallado

Scroll to top
Read Time: 17 min

() translation by (you can also view the original English article)

Usamos el Calendario de Eventos de WordPress para mostrar las publicaciones creadas cada día. A los visitantes también les encantaría saber sobre los futuros posts. He visto algunos sitios que proporcionan el título de futuros tutoriales para que los visitantes se mantengan actualizados en los temas que les gustan. También podemos usar WordPress como sistema de gestión de eventos. Los horarios de los eventos son mucho más importantes que las entradas de los blogs. Necesitamos proporcionar la opción de que los usuarios vean los eventos en un calendario. Incluso un sitio como la red Tuts+ puede tener tantos eventos como el lanzamiento de un nuevo sitio Tuts+, el lanzamiento de un libro electrónico, un boletín mensual y muchos más.

Así que en este tutorial voy a usar un plugin de jQuery llamado Verbose Calendar en combinación con Custom Post Types para crear un simple calendario de eventos. El plugin Verbose Calendar ha sido desarrollado por John Patrick Given y está disponible para su descarga en GitHub.


Qué estamos desarrollando hoy

El plugin Verbose Event Calendar permitirá a los propietarios de los sitios crear eventos en el panel de administración y mostrarlos a los usuarios mediante un calendario.

  • Creando un tipo de post personalizado para los eventos y añadiendo eventos.
  • Crear un shortcode para mostrar el Verbose Calendar de jQuery.
  • Agregar eventos al calendario detallado usando AJAX.

Paso1 Crear el archivo del plugin

Inicialmente tenemos que crear la carpeta de plugins en el directorio /wp-content/plugins. Voy a crear una carpeta llamada verbose-event-calendar como la carpeta de plugins y crear el archivo index.php con la información necesaria sobre el plugin. Una vez creado puedes ir al menú de plugins del panel de administración y activar el plugin usando el enlace activar.

1
<?php
2
/*

3
  Plugin Name:  Verbose Event Calendar

4
  Version: 1.0

5
  Plugin URI: http://wp.tutsplus.com/tutorials/wordpress-event-calendar-using-custom-post-types-and-verbose-calendar

6
  Description: Custom post type for creating events and display visually in a calendar control.

7
  Author URI: http://www.innovativephp.com

8
  Author: Rakhitha Nimesh

9
  License: GPL2

10
 */
11
?>

Paso2 Comprender la estructura de la carpeta

Ya que voy a usar plugins externos de jQuery para este tutorial, es importante tener un buen entendimiento sobre la estructura de carpetas y archivos. La siguiente pantalla te mostrará una vista gráfica de la estructura de archivos de este plugin.

Folder StructureFolder StructureFolder Structure
  • images - contiene todas las imágenes usadas para el plugin de WordPress.
  • javascripts - Archivos JavaScript para el plugin Verbose Calendar de jQuery.
  • stylesheets - Archivos CSS para el plugin Verbose Calendar de jQuery.
  • themes - Archivos CSS para jQuery Date Picker.
  • ui - archivos JavaScript para jQuery Date Picker.
  • verboseCalAdmin.js - código JavaScript personalizado relacionado con la sección de administración.
  • verboseCalCustom.js - código JavaScript personalizado relacionado con el front end.
  • styles.css - estilos personalizados para el plugin.
  • index.php - Código PHP del plugin.
  • README.md - Archivo README para jQuery Verbose Calendar.

Paso3 Poner en cola los archivos JavaScript y CSS

Necesitamos archivos separados de JavaScript y CSS para las secciones de la parte delantera y la de administración. El siguiente código te mostrará cómo incluirlos correctamente usando la acción wp_enqueue_scripts.

Incluye los archivos JavaScript y CSS para mostrar el jQuery Verbose Calendar:

1
<?php
2
function verbose_calendar_scripts() {
3
	global $post;
4
5
	wp_enqueue_script('jquery');
6
7
	wp_register_style('verboseCalCustomStyles', plugins_url('styles.css', __FILE__));
8
	wp_enqueue_style('verboseCalCustomStyles');
9
10
	wp_register_script('verboseCal', plugins_url('javascripts/jquery.calendar/jquery.calendar.min.js', __FILE__));
11
	wp_enqueue_script('verboseCal');
12
13
	wp_register_style('verboseCalMainStyles', plugins_url('stylesheets/main.css', __FILE__));
14
	wp_enqueue_style('verboseCalMainStyles');
15
16
	wp_register_style('verboseCalStyles', plugins_url('javascripts/jquery.calendar/calendar.css', __FILE__));
17
	wp_enqueue_style('verboseCalStyles');
18
19
	wp_register_script('verboseCalCustom', plugins_url('verboseCalCustom.js', __FILE__));
20
	wp_enqueue_script('verboseCalCustom');
21
22
	$config_array = array(
23
		'ajaxUrl' => admin_url('admin-ajax.php'),
24
		'nonce' => wp_create_nonce('reward-nonce')
25
	);
26
27
	wp_localize_script('verboseCal', 'calendarData', $config_array);
28
}
29
30
add_action('wp_enqueue_scripts', 'verbose_calendar_scripts');
31
?>

Incluya los archivos JavaScript y CSS para la interfaz de administración:

1
<?php
2
function verbose_calendar_admin_scripts() {
3
	global $post;
4
5
	wp_enqueue_script('jquery');
6
7
	wp_register_style('verboseCalCustomStyles', plugins_url('styles.css', __FILE__));
8
	wp_enqueue_style('verboseCalCustomStyles');
9
10
	wp_register_style('jqueryUIALL', plugins_url('themes/base/jquery.ui.all.css', __FILE__));
11
	wp_enqueue_style('jqueryUIALL');
12
13
	wp_register_script('jqueryUICore', plugins_url('ui/jquery.ui.core.js', __FILE__));
14
	wp_enqueue_script('jqueryUICore');
15
16
	wp_register_script('jqueryUIWidget', plugins_url('ui/jquery.ui.widget.js', __FILE__));
17
	wp_enqueue_script('jqueryUIWidget');
18
19
	wp_register_script('jqueryUIDate', plugins_url('ui/jquery.ui.datepicker.js', __FILE__));
20
	wp_enqueue_script('jqueryUIDate');
21
22
	wp_register_script('verboseCalAdmin', plugins_url('verboseCalAdmin.js', __FILE__));
23
	wp_enqueue_script('verboseCalAdmin');
24
}
25
26
add_action('admin_enqueue_scripts', 'verbose_calendar_admin_scripts');
27
?>

Paso4 Registrar el tipo de post personalizado para los eventos

Los eventos pueden tener muchos detalles como la fecha, el lugar, los participantes, etc. Voy a crear un tipo de Post Personalizado llamado event teniendo en cuenta la flexibilidad y la capacidad de ampliación del plugin. La primera tarea sería registrar un tipo de correo personalizado con WordPress. Repasemos el código para registrar los Tipos de Posts Personalizados.

1
<?php
2
function register_custom_event_type() {
3
	$labels = array(
4
		'name' => _x('Events', 'event'),
5
		'singular_name' => _x('Event', 'event'),
6
		'add_new' => _x('Add New', 'event'),
7
		'add_new_item' => _x('Add New Event', 'event'),
8
		'edit_item' => _x('Edit Event', 'event'),
9
		'new_item' => _x('New Event', 'event'),
10
		'view_item' => _x('View Event', 'event'),
11
		'search_items' => _x('Search Events', 'event'),
12
		'not_found' => _x('No events found', 'event'),
13
		'not_found_in_trash' => _x('No events found in Trash', 'event'),
14
		'parent_item_colon' => _x('Parent Event:', 'event'),
15
		'menu_name' => _x('Events', 'event'),
16
	);
17
	$args = array(
18
		'labels' => $labels,
19
		'hierarchical' => false,
20
		'supports' => array('title', 'editor'),
21
		'public' => true,
22
		'show_ui' => true,
23
		'show_in_menu' => true,
24
		'show_in_nav_menus' => true,
25
		'publicly_queryable' => true,
26
		'exclude_from_search' => false,
27
		'has_archive' => true,
28
		'query_var' => true,
29
		'can_export' => true,
30
		'rewrite' => true,
31
		'capability_type' => 'post'
32
	);
33
	register_post_type('event', $args);
34
}
35
add_action('init', 'register_custom_event_type');
36
?>
  • Primero voy a hacer una llamada a la función de la acción init para registrar un tipo de post personalizado. register_custom_event_type será llamado.
  • Dentro de la función tenemos que definir etiquetas para el tipo de post personalizado. Estas variables definidas en el array de $labels serán utilizadas como etiquetas para el formulario de creación de eventos y para guardar los tipos de posts en la base de datos. Puedes encontrar más información sobre las etiquetas de tipo de post personalizado en register_post_type en el Codex de WordPress
  • Luego tenemos que definir una lista de argumentos para ser pasados a la función de tipo register_post_type. Voy a usar valores por defecto para la mayoría de los argumentos como se muestra en el código anterior.
  • He hecho modificaciones al argumento supports. Se utiliza para definir los campos y componentes de formulario disponibles dentro de la pantalla de creación de eventos. En este plugin solo necesitamos el título del evento y la descripción. Así que he eliminado los otros valores como thumbnailcustom-fieldsexcerpt, etc.
  • Finalmente pasamos los argumentos de la función register_post_type con el nombre de nuestro Custom Post Type como event.

"Es importante que mantengas tu nombre Custom Post Type  bajo 20 caracteres y sin mayúsculas ni espacios."

Ahora podrás ver un elemento del menú llamado Eventos en el menú izquierdo del panel de administración antes del menú de Apariencia. Una vez que hagas clic en él, serás redirigido a una pantalla de creación de eventos con los campos Title y Description del evento. A continuación te mostraré cómo añadir campos específicos de evento al formulario.


Paso5 Crear campos de eventos personalizados

Los eventos pueden tener mucha información como mencioné anteriormente. Tienes la posibilidad de crear tus propios campos según el tipo de eventos que estés usando en el sitio web. Así que voy a crear campos para la fecha de inicio y la fecha de finalización, que son comunes a cualquier tipo de evento y te permitiré crear tus propios campos modificando el código. Podemos crear nuestros propios campos dentro de los meta cuadros, así como campos personalizados por defecto para almacenar información adicional. Como ya hemos eliminado los campos personalizados de la pantalla de eventos, voy a utilizar los campos dentro de los meta cuadros para crear fechas de inicio y fin.

Añadir un meta cuadro de información de eventos

Primero tenemos que añadir un meta cuadro como contenedor de nuestros campos personalizados usando el código de abajo.

1
<?php
2
add_action('add_meta_boxes', 'add_events_fields_box');
3
4
function add_events_fields_box() {
5
	add_meta_box('events_fields_box_id', 'Event Info', 'display_event_info_box', 'event');
6
}
7
?>

He usado los parámetros requeridos para la función add_meta_box en el código anterior. Tienes que pasar un ID único, el título de visualización del meta cuadro, el nombre de la función para generar campos personalizados y el tipo de evento como parámetros requeridos. Puedes encontrar más detalles sobre los parámetros opcionales en add_meta_box en el Codex de WordPress.

Agregar campos de eventos

Vamos a añadir 2 campos para la fecha de inicio y fin del evento dentro del meta cuadro creado anteriormente. El código HTML para los campos del formulario se generan dentro de la función display_event_info_box.

1
<?php
2
function display_event_info_box() {
3
	global $post;
4
5
	$values = get_post_custom($post->ID);
6
	$eve_start_date = isset($values['_eve_sta_date']) ? esc_attr($values['_eve_sta_date'][0]) : '';
7
	$eve_end_date = isset($values['_eve_end_date']) ? esc_attr($values['_eve_end_date'][0]) : '';
8
9
	wp_nonce_field('event_frm_nonce', 'event_frm_nonce');
10
11
	$html = "<label>Event Start Date</label><input id='datepickerStart' type='text' name='datepickerStart' value='$eve_start_date' />

12
		<label>Event End Date</label><input id='datepickerEnd' type='text' name='datepickerEnd' value='$eve_end_date' />";
13
	echo $html;
14
}
15
?>
  • Este código HTML se usará en las pantallas de Agregar Evento y Editar Evento. Así que inicialmente tenemos que obtener los valores actuales de los campos usando la función get_post_custom.
  • A continuación creamos el valor nonce que se comprobará en el proceso de guardado de eventos.
  • Luego emitimos el código HTML de los 2 cuadros de texto para la fecha de inicio y fin. Si un valor ya existe, lo asignamos al atributo value de los campos de entrada.

"He nombrado mis meta-claves para el evento de inicio y fin como _eve_sta_date y _eve_end_date. Cuando use '_' delante de las meta claves, no se mostrará como un campo personalizado. De lo contrario, tendremos campos duplicados, uno dentro de la meta caja y otro con campos personalizados. Asegúrate siempre de ponerle el prefijo '_' a tus meta-claves en caso de que no quieras que se muestre como un campo personalizado".

Añadir el selector de fechas a los campos de eventos

Aunque creamos 2 campos de texto para las fechas de inicio y fin, se usará para insertar las fechas reales. Así que voy a asignar el jQuery Date Picker a los campos de texto para permitir a los usuarios seleccionar las fechas de un calendario sin tener que introducirlas manualmente. Necesitamos añadir un poco de código JavaScript al archivo verboseCalAdmin.js para asignar los captadores de fecha a los campos de entrada.

1
<script>
2
$jq =jQuery.noConflict();
3
4
$jq(document).ready(function() {
5
	$jq("#datepickerStart").datepicker();
6
	$jq("#datepickerEnd").datepicker();
7
});
8
</script>

Paso6 Validar la creación de eventos

Necesitamos hacer una validación antes de guardar los eventos en la base de datos. Así que voy a usar la validación de jQuery en el formulario de creación de eventos como se muestra a continuación. El código de abajo está incluido dentro del archivo verboseCalAdmin.js.

1
<script>
2
	$jq('#post').submit(function() {
3
4
		$jq('.ver_cal_err').remove();
5
6
		if($jq("#post_type").val() =='event') {
7
			var err = 0;
8
			if($jq("#title").val() == '') {
9
				$jq("#title").after("<div class='ver_cal_err'>Event Title cannot be empty</div>");
10
				err++;
11
			}
12
			if($jq("#datepickerStart").val() == '' || $jq("#datepickerEnd").val() == '') {
13
				$jq("#datepickerEnd").after("<div class='ver_cal_err'>Start Date and End Date is required</div>");
14
				err++;
15
			}
16
17
			var start = $jq('#datepickerStart').datepicker('getDate');
18
			var end = $jq('#datepickerEnd').datepicker('getDate');
19
			var days = (end - start)/1000/60/60/24;
20
			if(days<0) {
21
				$jq("#datepickerEnd").after("<div class='ver_cal_err'>End Date should be greater than Start Date.</div>");
22
				err++;
23
			}
24
25
			if(err>0) {
26
				return false;
27
			}
28
			else {
29
				return true;
30
			}
31
		}
32
	});
33
</script>
  • La función de jQuery se llamará al presentar el formulario utilizando el post de identificación del formulario.
  • Hay un conjunto de campos ocultos en la pantalla de creación de post. Estoy usando el valor del campo oculto post_type para comprobar el tipo de post.
  • El título y las fechas son obligatorios. Así que esos campos se validan usando jQuery.
  • Luego agregamos cajas de error personalizadas para que se muestren debajo de cada campo.
  • Si el formulario no se valida correctamente, se mostrarán los errores y se detendrá la creación de eventos hasta que se solucionen todos los errores de validación.

Paso7 Guardar eventos en la base de datos

Una vez que se han corregido todos los errores de validación y se ha enviado el formulario con éxito, llamamos a la función save_event_information en la acción save_post como se muestra en el siguiente código.

1
<?php
2
add_action('save_post', 'save_event_information');
3
4
function save_event_information($post_id) {
5
	// Bail if we're doing an auto save

6
	if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE)
7
		return;
8
9
	// if our nonce isn't there, or we can't verify it, bail

10
	if (!isset($_POST['event_frm_nonce']) || !wp_verify_nonce($_POST['event_frm_nonce'], 'event_frm_nonce'))
11
		return;
12
13
	// if our current user can't edit this post, bail

14
	if (!current_user_can('edit_post'))
15
		return;
16
17
	if (isset($_POST['datepickerStart']))
18
		update_post_meta($post_id, '_eve_sta_date', esc_attr($_POST['datepickerStart']));
19
	if (isset($_POST['datepickerEnd']))
20
		update_post_meta($post_id, '_eve_end_date', esc_attr($_POST['datepickerEnd']));
21
}
22
?>
  • Este es el método estándar de guardar la meta post personalizada en la base de datos. Primero comprobamos si la función se llama dentro de WordPress auto-guardar y volver desde el script.
  • A continuación validamos el valor nonce generado en el formulario y el valor nonce enviado a través de $_POST.
  • Entonces tenemos que comprobar si el usuario tiene los permisos necesarios para crear eventos usando la función current_user_can('edit_post').
  • Finalmente guardamos tanto la fecha de inicio como la de finalización en la tabla wp_postmeta de la base de datos.

Ahora hemos completado el proceso de creación de eventos a través del panel de administración. A continuación tenemos que trabajar en la inclusión del jQuery Verbose Calendar en la parte delantera y mostrar los eventos y mensajes a los usuarios.


Paso8 Crear shortcode para Verbose Calendar

Primero necesitamos crear un shortcode que muestre el Verbose Calendar en la página. Una vez que incluyas el siguiente código puedes crear una nueva página en el panel de administración y añadir el shortcode como [verbose_calendar/] al editor para mostrar el calendario en el post.

1
<?php
2
function verbose_calendar() {
3
	global $post;
4
5
	return "<div id='main-container'></div><div id='popup_events'>

6
		<div class='pop_cls'></div>

7
		<div id='popup_events_list'>

8
			<div id='popup_events_head'></div>

9
			<div id='popup_events_bar'></div>

10
			<div id='event_row_panel' class='event_row_panel'></div>

11
			<div id='popup_events_bottom'></div>

12
		</div>

13
	</div>";
14
}
15
16
add_shortcode("verbose_calendar", "verbose_calendar");
17
?>

El código abreviado anterior inserta los elementos HTML necesarios para el calendario. Tenemos que cargar el calendario usando jQuery como se muestra a continuación. El siguiente código está incluido dentro del archivo verboseCalCustom.js.

1
<script>
2
$jq =jQuery.noConflict();
3
4
$jq(document).ready(function() {
5
6
	$jq("#main-container").calendar({
7
		tipsy_gravity: 's', // How do you want to anchor the tipsy notification? (n / s / e / w)
8
		post_dates : ["1","2"],
9
		click_callback: calendar_callback, // Callback to return the clicked date
10
		year: "2012", // Optional, defaults to current year - pass in a year - Integer or String
11
		scroll_to_date: false // Scroll to the current date?
12
	});
13
14
	$jq(".pop_cls").on("click",function() {
15
		$jq("#popup_events").fadeOut("slow");
16
	});
17
});
18
</script>

Si todo se hace correctamente, deberías tener un calendario como la siguiente imagen en la página que has creado.


Paso9 Asignación de eventos al calendario

La siguiente tarea de este tutorial es consultar los eventos y mensajes de la base de datos y mostrarlos en el calendario. Verbose Calendar por defecto solo proporciona el diseño del calendario. Tenemos que personalizar el plugin para asignar eventos al calendario. Verbose Calendar utiliza una función llamada g.prototype.print para mostrar el calendario. Así que vamos a personalizar esta función para recuperar eventos y mensajes de la base de datos como se muestra a continuación. El código se encuentra en el archivo jquery.calendar.min.js dentro de la carpeta de javascripts.

1
<script>
2
g.prototype.print=function(c) {
3
4
	postDetailsArr = [];
5
6
	var verboseElement = this.element;
7
	$jq.post(calendarData.ajaxUrl, {
8
		action:"get_posts_for_year",
9
		nonce:calendarData.nonce,
10
		currentYear:e.options.year
11
	}, function(result, textStatus) {
12
13
		$jq.each(result, function(index, data) {
14
15
			if(data.type == 'event') {
16
				if(postDetailsArr[data.startDate]) {
17
					postDetailsArr[data.startDate].push(data);
18
				}
19
				else {
20
					postDetailsArr[data.startDate] = [];
21
					postDetailsArr[data.startDate].push(data);
22
				}
23
				postArr.push(data.startDate);
24
			}
25
			else {
26
				if(postDetailsArr[data.post_date]) {
27
					postDetailsArr[data.post_date].push(data);
28
				}
29
				else {
30
					postDetailsArr[data.post_date] = [];
31
					postDetailsArr[data.post_date].push(data);
32
				}
33
				postArr.push(data.post_date);
34
			}
35
36
		});
37
38
	}, "json");
39
40
};
41
</script>
  • Explicaré los códigos que hemos cambiado y que son importantes desde la perspectiva del plugin. El código específico del plugin se omite aquí.
  • Primero he colocado el código completo dentro de una petición AJAX. Esta petición se hará cada vez que cambie el año o cargue el calendario.
  • La solicitud de AJAX se hará a la acción get_posts_for_year. Devolverá la lista de posts y eventos del año en curso que se muestra en la parte superior del calendario.
  • Luego hacemos un bucle con cada resultado usando el método $jq.each. Pasamos los detalles del resultado al array postDetailsArr.
  • Usamos la fecha de inicio para los eventos y la fecha de publicación para las entradas y asignaciones al array postArr.
1
<script>
2
	var mon = ((parseInt(b)+1) < 9) ? "0"+(parseInt(b)+1) : (parseInt(b)+1);
3
	daynum = (j<9)?"0"+j:j;
4
5
	var searchedIndex = ($jq.inArray((mon+"-"+daynum+"-"+d), postArr));
6
	if(searchedIndex != -1) {
7
		g.append("<div data-date='"+(parseInt(b)+1)+"/"+j+"/"+d+"' class='label dat-"+(parseInt(b)+1)+"-"+j+"-"+d+" day "+h+" event_highlight'>"+j+"</div>");
8
	}
9
	else {
10
		g.append("<div data-date='"+(parseInt(b)+1)+"/"+j+"/"+d+"' class='label dat-"+(parseInt(b)+1)+"-"+j+"-"+d+" day "+h+"'>"+j+"</div>");
11
	}
12
</script>
  • El fragmento de código anterior también se encuentra dentro de la función print.
  • Preparamos la fecha y el mes añadiendo 0 como prefijo en caso de que sea menor de 10.
  • Entonces comprobamos que cada fecha existe dentro del postArr usando la función inArray.
  • Si date contiene un evento o post, añadimos una clase especial de CSS llamada event_highlight.

Generar listas de post y de eventos

Ahora tenemos que consultar la base de datos y generar resultados para la solicitud de AJAX. Considera el siguiente código para el proceso de generación de la solicitud.

1
<?php
2
add_action('wp_ajax_nopriv_get_posts_for_year', 'get_posts_for_year');
3
add_action('wp_ajax_get_posts_for_year', 'get_posts_for_year');
4
5
function get_posts_for_year() {
6
	global $post, $wpdb;
7
8
	$allEvents = array();
9
10
	$sql = "SELECT $wpdb->posts.guid,$wpdb->posts.post_title,DATE_FORMAT(post_date, '%m-%d-%Y') as post_date  FROM $wpdb->posts WHERE Year($wpdb->posts.post_date)='" . $_POST['currentYear'] . "' and post_status='publish' and post_type='post' ";
11
12
	$allPosts = array();
13
	$yearlyPosts = $wpdb->get_results($sql, ARRAY_A);
14
	foreach ($yearlyPosts as $key => $singlePost) {
15
		$singlePost['type'] = 'post';
16
17
		array_push($allEvents, $singlePost);
18
	}
19
20
	$sql = "SELECT $wpdb->posts.ID,$wpdb->posts.guid,$wpdb->posts.post_title,DATE_FORMAT(post_date, '%m-%d-%Y') as post_date  FROM $wpdb->posts inner join $wpdb->postmeta on $wpdb->posts.ID=$wpdb->postmeta.post_id WHERE $wpdb->postmeta.meta_key='_eve_sta_date' and Year(STR_TO_DATE($wpdb->postmeta.meta_value, '%m/%d/%Y'))='" . $_POST['currentYear'] . "' and post_status='publish' and post_type='event'";
21
22
	$yearlyEvents = $wpdb->get_results($sql, ARRAY_A);
23
	foreach ($yearlyEvents as $key => $singleEvent) {
24
25
		$startDate = str_replace("/", "-", get_post_meta($singleEvent['ID'], '_eve_sta_date'));
26
		$endDate = str_replace("/", "-", get_post_meta($singleEvent['ID'], '_eve_end_date'));
27
28
		$singleEvent['startDate'] = $startDate[0];
29
		$singleEvent['endDate'] = $endDate[0];
30
		$singleEvent['type'] = 'event';
31
32
		array_push($allEvents, $singleEvent);
33
	}
34
	echo json_encode($allEvents);
35
	exit;
36
}
37
?>
  • Primero asignamos la acción tanto a los usuarios registrados como a los usuarios normales.
  • Luego obtenemos todas las publicaciones del año seleccionado y las asignamos al array $allEvents.
  • Asignamos los eventos para el año seleccionado usando el mismo procedimiento anterior y la salida en formato JSON.

Paso10 Visualización de la lista de eventos

Las fechas con eventos o mensajes serán resaltados en un color azul. Una vez que hagas clic en una fecha así, se mostrará la lista de eventos. Verbose Calendar tiene una función llamada calendar_callback que vamos a utilizar para mostrar la lista de eventos. El siguiente código JavaScript dentro del archivo verboseCalCustom.js será usado para esta funcionalidad.

1
<script>
2
var calendar_callback = function(date) {
3
4
	$jq("#event_row_panel").html("");
5
6
	date.month = (date.month < 10) ? "0"+date.month : date.month;
7
	date.day = (date.day < 10) ? "0"+date.day : date.day;
8
	var activeDate = date.month+"-"+date.day+"-"+date.year;
9
10
	$jq("#popup_events_head").html("Events for "+activeDate);
11
12
	var dailyEvents = postDetailsArr[activeDate];
13
14
	var eventHTML = "";
15
16
	$jq.each(dailyEvents, function(index, data) {
17
18
		if(data.type=='event') {
19
			eventHTML += "<div class='event_row'><div class='event_title'><a href='"+data.guid+"' >"+data.post_title+"</a></div><div class='event_dates'>Start Date : <span>"+data.startDate+"</span>  End Date : <span>"+data.endDate+"</div></div>";
20
		}
21
		else {
22
			eventHTML += "<div class='post_row'><div class='post_title'><a href='"+data.guid+"' >"+data.post_title+"</a></div><div class='post_dates'>Published Date : <span>"+data.post_date+"</span></div></div>";
23
		}
24
25
	});
26
27
	$jq("#event_row_panel").html(eventHTML);
28
	$jq("#popup_events").fadeIn("slow");
29
}
30
</script>
  • La fecha en la que se haga clic pasará automáticamente a esta función. Primero asignamos la fecha a una variable usando el objeto de la fecha pasada.
  • A continuación obtenemos los eventos y mensajes para la fecha seleccionada usando postDetailsArr generado en la función de impresión.
  • Luego asignamos el evento y publicamos los detalles considerando la variable type.
  • Finalmente asignamos todo el HTML al contenedor event_row_panel y mostramos la lista de eventos.

Conclusión

Una vez completado el tutorial, tendrás un genial plugin de calendario de eventos. Este contiene solo campos básicos de eventos. Puedes crear más información sobre los eventos añadiendo más campos personalizados. No dudes en ampliar la funcionalidad de este plugin y compartir tus sugerencias.

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.