Buenas Wecindario, Si eres usuario de WordPress igual te has dado cuenta de que hay ocasiones que necesitas un widget personalizado para tu footer o sidebar. Si es el caso, sigue leyendo, esta es tu guía ideal 👇

Qué es el Widget del WordPress

El  Widget es un pequeño código que nos deja extender funciones de la web. Dejándonoslo  aplicar en el header y el sidebar

Hosting Web

Recuerda que muchos Widgets son los mismos elementos usados como bloques en  el Gutenberg. De ser así, podremos aplicarlos dentro de nuestras páginas y posts.

¿ Qué hay que saber para hacer Widgets en WordPress?

Para ello  podremos hacer uso de la clase del WordPress , WP_Widget. Y ahora veremos como hacerlo

¿Qué es la clase WP_Widget?

Es un elemento de la Programación Orientada a Objetos (POO). Y este lo podremos “clonar”. Y esta nos permitirá crear un nuevo objeto, un Widget.

Básicamente es la API que nos deja crear un Widget personalizado en nuestro WordPress. Y hay que extender esta clase y usar, unos 4 métodos que lleva. (Tranqui, lo veremos mas adelante)

Los métodos de la clase WP_Widget

Para poder  crear el  Widget a medida usaremos  los 4 primeros métodos del listado. del resto por ahora no hablaremos

  • __construct: Aquí declararemos el identificador, el nombre y descripción del Widget
  • widget: Aquí pondremos el código del front end de la web
  • form: este formulario aparecerá en la web, exactamente en el frontal
  • update: Con este, actualizaremos variables con el input visible en el panel de control

Ya sabemos un poco más, lo básico para poder empezar  y en este caso haremos el Widget para contar visitas en la web.  esta será sencilla, se guardará en nuestra base de datos , exactamente en options y se irá sumando en 1 cada vez que carguen una página.

¿ Cómo crear el código en el Widget contador de visitas que vamos a hacer?

Aqui os hago cada paso necesario para crear vuestro  Widget contador de visitas  mediante una clase y funciones,

1. Creamos la clase que tendrá los detalles del Widget

Y entonces, extendremos el  WP_Widget  como veis :

<?php
class widget_webheroe extends WP_Widget {
	//Función que construye la clase WP_Widget y declaramos el identificador, el nombre y descripción
	function __construct() {
		parent::__construct(
			
		);
	}
	public function widget( $args, $instance ) {
              //Aquí aplicamos el código del Widget
	}
	public function form( $instance ) {
		//Aquí pondremos el codifgo del formulario 
	}
	public function update( $new_instance, $old_instance ) {
		//Aquí registramos las variables que estan en backend
	}
}

2. Crearemos el método Constructor

Aquí podremos añadir el identificador del Widget, Mostrando el nombre y descripción del Widget

Usaremosparent::__construct, por ejemplo parent::WP_Widget()$this->WP_Widget() o WP_Widget::WP_Widget()

<?php
//Función constructora  WP_Widget y declaramos el identificador, el nombre y descripción
	function __construct() {
		parent::__construct(
			//Id
			'widget_webheroe',
			//Nombre
			'Contador Webheroe',
			//Descripción
			array( 'description' => 'Contador de WebVisitas' )
		);
	}

3. Creamos la función Widget

Los valores que se le pasan a $args[]se usan  para poner código antes o después de nuestro widget. Además, se  usará el filtro widget_title ,Cómo veis  he comentado todo el código lo más claramente posible para que se entienda fácilmente, aun así si tenéis dudas ya me contactáis

<?php
         
public function widget( $args, $instance ) {
		
		$title = apply_filters( 'widget_title', $instance['title'] );
		
		echo $args['before_widget'];
		
		//Si el título si existe
		if (!empty($title)){
			echo $args['before_title'] . $title . $args['after_title'];
		}
		
		/*El código de tu Widget comienza aquí*/
		
		$option = get_option($this->option_name);//Obtenemos el array con las opciones de este Widget
		
		$counter = $option[$this->number]['counter'];//Obtenemos el valor que nos interesa
		
		//Comprobamos si es una página o un post
		if(is_page() || is_single()){
			$sum_counter = intval($counter) + 1;//Sumamos uno al valor
			
			$option[$this->number]['counter'] = $sum_counter;//Sobreescribimos el valor de la variable
			
			//Creamos un bucle y se repite hasta que comprobamos el valor , y vemos si se ha actualizado o no
			$updated = false;
			while($updated === false){
				$updated = update_option($this->option_name, $option);
			}
			
		}else{
			//Si no es página ni post, el valor no se incrementará
			$sum_counter = $counter;
		}
		
		//Enseñaos el Widget en el front end
		?>
	<p style="color:#fff">Ha recibido <span style="font-size:50px;font-weight:800;color:#ada"><?php echo $sum_counter; ?></span> visitas</p>
		<?php
		
		/*Aquí acaba el código de tu Widget*/
		
		echo $args['after_widget'];
		
	}

 

Hosting Web

4. Crearemos el método Form

Aquí  veremos el código del  Back End. En la página de edicion de Widgets

<?php
 
public function form( $instance ) {
		//revisar si hemos puesto un título al Widget. Si no, se pondrá el título por defecto
		if(isset($instance[ 'title' ])){
			$title = $instance[ 'title' ];
		}else{
			$title = 'Widget Contador de Visitas';
		}
		
		//Creamos el formulario que aparece  poder cambiar el título
		?>
		<p>
			<label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _e( 'Title:' ); ?></label>
			<input class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" type="text" value="<?php echo esc_attr( $title ); ?>" />
		</p>
		<?php
	}

5. Finalizamos con Update

Crearemos el título y ponemos el contador a 0.

<?php
public function update( $new_instance, $old_instance ) {
		$instance = array();
		$instance['title'] = ( ! empty( $new_instance['title'] ) ) ? strip_tags( $new_instance['title'] ) : '';
		$instance['counter'] = '0';
		return $instance;
	}

6. Registramos el Widget

Ahora usaremos el hook register_widget. Y este es el  gancho que nos permite registrar la clase anterior y se encarga de que funcione y además que aparezca en el listado de Widgets. Usaremos  este hook sólo cuando terminemos de crear la clase, si no tendremos un error fatal:

<?php
add_action( 'widgets_init', function(){
	//Registro de la clase que hace funcionar el Widget
	register_widget( 'widget_webheroe' );
});

Y ya podemos visitar la sección de Widgets en el panel de administración Apariencia/Widgets. Y lo encontraremos dentro del grupo «Widgets».

Y esto es todo Wecindario !  Hasta la próxima, recuerda que el Widget  que hemos creado cómo ejemplo, sirve para entender un poco mejor como va la clase  WP_Widget y crear nuestros Widgets propios.

Espero que os haya gustado y os haya sido útiles! Hasta la próxima