Puente Zubizuri Bilbao

Plugin personalizado para Wordpress

Integración de un componente personalizado en Wordpress donde se podrá desarrollar una aplicación compleja.

Desde aquí te podrás bajar el componente entero con las funcionalidades mínimas para que lo puedas desarrollar según concretas especificaciones.

Lo primero que tenemos que hacer es insertar una función en el archivo functions.php de nuestra template que posibilitará insertar más tarde un shortcode en cualquiera de nuestros posts:

 
function shortcodes_init(){
  add_shortcode( 'mycode', 'componente' );
}
add_action('init', 'shortcodes_init');
  

Seguidamente de esta función añadiremos la función componente que hemos determinado.

function componente(){
    $var='valor de var';
 return $var;	
}
  

Ahora editamos un post e incluimos el shortcode [mycode][/mycode] , guardamos el post y ya podemos ver en ese post valor de var .

Vamos a crear un par de varibles que nos proporciona Wordpress, $slug y $tmpldir para que nos quede la función así:

function componente(){
global $wp;
$slug = add_query_arg( array(), $wp->request );
$tmpldir = get_template_directory();
echo $slug.    ' - '    .$tmpldir;
 return;
	}

Actualizamos la url del post y podemos ver el slug o enlace permanente y la ruta absoluta al directorio de la template en uso.

Dentro del directorio de la plantilla actual creamos el directorio Component y dentro de éste el archivo controller.php donde escribiremos: esto es controller.php y lo guardamos.

Ahora modificamos la función para incluir este archivo controller.php

function componente(){ global $wp;
$slug = add_query_arg( array(), $wp->request );
$tmpldir = get_template_directory();
include($tmpldir."/Component/controller.php");
return; }
  Y comprobamos que en el posts vemos "esto es controller.php"
  

Diseño MVC en Wordpress

Creamos una página nueva, le ponemos cualquier título, pero el enlace permanente o "slug" será "componente" y añadimos a éste post el shortcode [mycode][/mycode].

MODELO

Creamos Component/model.php y su primer método que retornará el path de la vista Component/views/vcustom.php

Component/model.php 
class Model
{
public function getview($viewParam){
if ($_GET['vplay']== "") {  $view = $viewParam;
 } else {  $view = $_GET['vplay']; }
$VPATH = "views/v" . $view . ".php";
 return $VPATH;
    }}

Vemos que si pasamos por url ?vplay=custom tenemos que el path será "views/vcustom.php"

Ahora creamos el método "componente" en el controller que llamará al modelo y a la vista

 
 Component/controller.php 
 
 //incluimos el modelo
 include('model.php');
 public function componente(){
 //instaciamos la clase
 $clas=new Model(); 
 //incluimos la vista
require_once($clas->getview('custom'));
return ;
	}
 

La vista que obtendremos vendrá dada por el valor de vplay en la url pero, si no existe este valor, la obtenemos del valor que le pasamos como argumento al método getview('custom').

Ya podemos ver en la página /componente lo que tengamos en la vista views/vcustom.php

Siguiendo con el modelo, creamos la función "componente" que devolverá un objeto y a la que llamaremos en el controller

Component/model.php
 public function componente($objDatos)
    {
  $obj = new \stdClass();
  $obj->objDatos = $objDatos; 
  return $obj;
    }
	

CONTROLADOR

	Component/controller.php
	
	 public function componente(){
 //instaciamos la clase
 $clas=new Model(); 
 //creamos $objDatos
 $objDatos = 'valor de objDatos';
 $custom=$clas->componente($objDatos);
 //$custom tendrá el valor del retorno del
 //método componente del modelo
 //incluimos la vista
require_once($clas->getview('custom'));
return ;
	}
	

VISTA

En la vista escribimos en php: print_r($custom) y tendremos:

 stdClass Object ( [objDatos] => valor de objDatos ) 

RESUMEN MVC

Ahora y con un poco de imaginación podrás desarrollar este diseño con el que podrás crear una aplicación escalable cien por cien.

Crea funciones en el modelo y añade el valor de su retorno como valores de propiedades del objeto que devuelve el método componente:

 public function componente($objDatos)
    {
  $obj = new \stdClass();
  $obj->objDatos = $objDatos;
  $obj->getContent = $this->getContent($objDatos);  
  return $obj;
    }
	
 
 public function getContent($objDatos)
    {
 $pdo = new \PDO(
--- tus credenciales de la BBDD --
        );
    
$query = "SELECT ID,post_title 
 FROM   wp_posts 
 WHERE post_type = ? ORDER BY ID";
        $stmt = $pdo->prepare($query);
        $stmt->execute(['page']);
 $data["response"] = [];
 while ($results = $stmt->fetch(PDO::FETCH_OBJ)) {
            $data["response"][] = $results;
        }
       $stmt = null;
        return $data["response"];
    }

© 2023 AppWebBilbao Joomla 5 software