Desarrollo estratégico de Widgets y Metaboxes

Nuestro primer widget

Haremos un widget que nos permita obtener entradas de una categoría específica.

class categoryEntries extends WP_Widget {
	function categoryEntries() {
		// Información básica de nuestro widget
		$info = array('classname' => 'category_entries', 'description' => 'Obtiene las entradas de una categoría específica');
		// Iniciamos nuestro widget
		$this->WP_Widget('category_entries', 'Entradas de una categoría', $info);
	}

	function form( $instance ){
		// Extraemos la información de $instance, para mostrarla en el form
		extract($instance);

		// Título del widget
		echo '<p><label>Título: <input type="text" name="'.$this->get_field_name('title').'" value="'.$title.'" /></label></p>';

		// Categoría a seleccionar
		echo '<p><label>Selecciona una categoría: '.wp_dropdown_categories('name='.$this->get_field_name('category').'&selected='.$category.'&echo=0').'</label></p>';

		// Cantidad de entradas que mostraremos
		echo '<p><label>Cantidad de entradas: <input type="text" name="'.$this->get_field_name('limit').'" value="'.$limit.'" size="3" /></label></p>';
	}

	function update( $new_instance, $old_instance ) {
		// el 99% de las veces, no necesitas hacer más que esto ;)
		return $new_instance;
	}

	function widget( $args, $instance ){
		// Extraemos la información de ambos arrays
		extract($args);
		extract($instance);

		// Lo que mostraremos en nuestra web
		// $before_widget y $after_widget variabels declaradas en el sidebar que se obtienen desde $args, al igual que $before_title y $after_title
		echo $before_widget;

		// Condicionamos si hemos ingresado un título en el widget
		// $before_widget y $after_widget variabels declaradas en el sidebar
		if( $title ) echo $before_title . $title . $after_title;

		// Obtenemos las entradas asociadas a la categoría
		global $post;
		$entries = get_posts("cat=$category&showposts=$limit");

		// Si obtenemos entradas, las mostramos
		if( !empty( $entries ) ){
			echo '<ul>';
			foreach( $entries as $post ){
				setup_postdata( $post );
				echo '<li><a href="'.get_permalink().'" title="'.esc_attr( get_the_title() ).'">'.get_the_title().'</a></li>';
			}
			echo '</ul>';
		}
		echo $after_widget;
	}
}
register_widget('categoryEntries');

Este widget es exactamente el mismo que pueden ver en el sidebar de esta entrada, llamado “Sobre WordPress“.

One thought on “Desarrollo estratégico de Widgets y Metaboxes”

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>