Sei sulla pagina 1di 19

Desarrollar en WordPress

ndice Desarrollar en WordPress

1 Recursos 4

1.1 El ncleo 4

1.2 El Codex 6

1.3 Referencia de funciones 7

1.4 Coding Standards 8

2 Cmo funciona WordPress 9

2.1 La base de datos 9

2.2 El "Loop" 13
ndice (cont.) Desarrollar en WordPress

3 Hooks 16

3.1 Acciones (Actions) 16

3.2 Filtros (Filters) 17

4 Dnde aadir nuestro cdigo 18


Desarrollar en WordPress | TELEFNICA // 4

1 Recursos
1.1 El ncleo
Casi todo lo que obtenemos al instalar Wordpress es parte del Veamos un par de ejemplos de comentarios en diferentes archivos:
ncleo (core en ingls). La instalacin incluye un par de plugins y
varios themes bsicos, adems de la informacin de configuracin /wp-login.php (informacin del archivo, al inicio)
que aportamos durante el proceso; pero todo lo dems es el
"motor" de nuestro CMS. <?php
/**
El ncleo de WordPress es la base del CMS, que nos aporta la
mayor parte de la lgica y las funcionalidades. No debemos * WordPress User Page
modificarlo, ya que podramos causar un funcionamiento
*
inesperado. Adems, cualquier modificacin podra perderse al
instalar una nueva actualizacin. * Handles authentication, registering, resetting
passwords, forgot password,
Sin embargo, conviene acceder a l para comprender su
funcionamiento y con l, la forma en la que podemos modificarlo * and other user handling.
mediante nuestro propio cdigo en los temas y plugins. Casi todo
*
el cdigo est comentado. Muchos archivos incluyen al inicio un
bloque de comentario aportando una descripcin de lo que hacen * @package WordPress
y otra informacin til. Tambin la mayora de funciones cuenta
*/
con una descripcin de lo que hacen as como de los parmetros
que esperan y que devuelven o la versin de Wordpress en la que
fueron incluidas.
Desarrollar en WordPress | TELEFNICA // 5

Estos comentarios tienen un formato especfico llamado DocBlock1


/wp-includes/user.php (funcin: email_exists) de PHPDoc.
...
PHPDoc es una forma de aadir documentacin al cdigo
/** mediante bloques de comentario. Estos pueden ser usados por
herramientas como phpDocumentator2 para generar un archivo con
* Checks whether the given email exists.
la documentacin fuera del propio cdigo.
*
Dado que la mayor parte de Wordpress est incluida en grandes
* @since 2.1.0
archivos con multitud de funciones que se llaman unas a otras,
* conviene aprender a "saltar" fcilmente de a sus definiciones.
La mayora de IDEs y editores de cdigo permiten buscar entre
* @param string $email Email.
los archivos de un proyecto la definicin de una funcin. Muchos
* @return int|false The user's ID on success, and permiten acceder directamente a esa definicin usando el men
contextual3 al poner el cursor sobre una llamada a la funcin.
false on failure.
*/ Muchos temas y plugins tambin cuentan con documentacin o
con un cdigo claro que permite entender su funcionamiento. Sin
function email_exists( $email ) {
embargo, debemos estar seguros de su calidad antes de tomarlos
if ( $user = get_user_by( 'email', $email) ) { por referencia.
return $user->ID;
}
return false;
}
1 https://en.wikipedia.org/wiki/PHPDoc#DocBlock
... 2 https://phpdoc.org/
3 Generalmente accesible al hacer clic con el botn secundario del ratn.
Desarrollar en WordPress | TELEFNICA // 6

1.2 El Codex
El Codex4 de WordPress es la documentacin online de la
plataforma. En ella podemos encontrar artculos a modo de gua
que van desde la instalacin y el uso bsico, a la creacin de temas
y plugins.

Tambin cuenta con un glosario de trminos5 que puede ser muy


til sobretodo al inicio, para entender muchos de los trminos que
se usan en la plataforma y en propia documentacin.

La web es una wiki mantenida por la comunidad y traducida, al


menos parcialmente, a diversos idiomas. Sin embargo, hay que
tener en cuenta que a veces la documentacin no est todo lo
actualizada que debiera. Pese a eso, sigue siendo una referencia
ineludible a la hora de trabajar con WordPress.

El Codex cuenta con un buscador para encontrar fcilmente aquello


que buscamos, pero hay que tener en cuenta que buscar en todo
el sitio de wordpress.org y no solo en el Codex.

Pgina principal del Codex

4 https://codex.wordpress.org/
5 https://codex.wordpress.org/Glossary
Desarrollar en WordPress | TELEFNICA // 7

1.3 Referencia de funciones


La referencia de funciones6 es el lugar perfecto para buscar
informacin sobre todas las funciones disponibles en Wordpress.
Esta web viene a sustituir a la antigua versin7 que inclua el Codex
y que sigue activa y es preferible evitar.

Podremos buscar fcilmente una funcin y consultar su


descripcin, los parmetros, el valor devuelto, el changelog8 y la
propia definicin de la funcin. Esta es la misma informacin que
vemos en los archivos PHP, y no es casualidad. Esta referencia est
construida a partir de la informacin del propio cdigo, haciendo
uso de PHPDoc, lo que nos asegura que est siempre actualizada.
En ese sentido, ser cuestin de comodidad acudir segn el caso a
esta referencia o al propio cdigo de los archivos.

Sin embargo, la referencia nos aporta unos interesantes "extras":


ejemplos de uso aportados por la comunidad y un listado de las
partes del cdigo desde la que es llamada la funcin. Ambos sern
recursos muy valiosos.

6 https://developer.wordpress.org/reference/ Portada de la Referencia de Funciones de WordPress


7 https://codex.wordpress.org/Function_Reference/
8 La versin en la que se introdujo la versin y aquellas en las que
sufriera cambios (indicando cuales) en caso de que las hubiera.
Desarrollar en WordPress | TELEFNICA // 8

1.4 Coding Standards


Al tratarse de una plataforma en la que participan un gran nmero Uso de espacios
de desarrolladores, es importante buscar la legibilidad y la sencillez
Se deben usar espacios a ambos lados de los parntesis de los
del cdigo, a lo que ayuda un estilo comn. WordPress cuenta con
condicionales y bucles.
sus propios estndares de cdigo no solo para PHP sino tambin
para HTML, CSS y JavaScript9. Conviene tener presentes todas estas En los lados interiores de los parntesis al definir y llamar a
reglas cuando desarrollamos. funciones.
A ambos lados de los comparadores.
Algunos ejemplos de las reglas de PHP son:

Condiciones "Yoda"10
Convenciones de nombres
Los nombres de las variables se escriben en letras minsculas. En las comparaciones lgicas se deben poner las variables en la
parte izquierda y las constantes, literales o funciones en el lado
Las clases comienzan las palabras en maysculas.
derecho. As, por ejemplo, en caso de que olvidemos un signo de
Las constantes estn escritas ntegramente en maysculas. igual (=) al ir a hacer una comparacin de igualdad (==), se lanzar
un error en lugar de asignarse un valor de forma errnea.
En los tres casos anteriores, las palabra se separan mediante
guiones bajos ("snake_case").
if ( true == $var ) {
En los nombres de archivo las palabras se separan con guiones
$other_var = "value";
medios.
}

9 Los estndares completos de WordPress pueden consultarse en


https://make.wordpress.org/core/handbook/best-practices/coding- 10 Recibe su nombre del personaje de "Star Wars" por la similitud con su
standards/ peculiar forma de hablar.
Desarrollar en WordPress | TELEFNICA // 9

2 Cmo funciona WordPress


Pese a la gran variedad de personalizacin que podemos hacer en WordPress, lo cierto es que casi todas las pginas
trabajan de una forma muy similar.

2.1 La base de datos


Adems del propio cdigo del ncleo, es interesante ver como est Entrada/Post (post)
estructurada la base de datos para comprender como se almacenan
Pgina (page)
los datos. Al hacerlo una de las cosas que puede llamar la atencin
es encontrar una tabla llamada wp_posts pero no encontrar Adjunto (attachment)
ninguna cuyo nombre nos haga pensar que almacene las pginas.
Revisin (revision)
Aunque a nivel de usuario un post y una pgina sean cosas Elemento de men (nav_menu_item)
diferentes, internamente Wordpress las trata del mismo modo.
Ambos tipos de contenido se guardan en la misma tabla (wp_posts) Comprendida esta diferenciacin entre lo que supone un post para
con los mismos campos de informacin. Lo nico que los diferencia el usuario y lo que se entiende internamente como post (en un
y permite que puedan ser tratados (y sobre todo, mostrados) de sentido ms genrico, veamos la estructura completa de tablas.
forma diferentes es el campo post_type.

Pero las pginas y las entradas no son dos nicos post_types


posibles. Por defecto, Wordpress cuenta con cinco tipos
diferentes11:
11 A los que , como veremos ms adelante, podremos aadir nuevos
tipos.
Desarrollar en WordPress | TELEFNICA // 10

Esquema de la base de datos de WordPress a partir de la versin 4.4.2 (https://codex.wordpress.org/File:WP4.4.2-ERD.png)


Desarrollar en WordPress | TELEFNICA // 11

Los nombres de las tablas don bastante descriptivos, pero Si la tabla wp_terms almacena todas los trminos que usamos
repasemos cada una de las tablas para ver qu contenido para clasificar nuestra informacin, esta tabla almacena esas
almacenan. Ten en cuenta que el prefijo "wp_" no tiene por qu diferentes clasificaciones (taxonomas) a la que pueden pertenecer.
coincidir en tu instalacin (de hecho, no debera), sino que tomar el Por defecto solo tiene dos registros: "category" (categora) y "post_
valor que le indicaras en la instalacin. tag" (etiqueta).

wp_posts wp_term_relationships

Como hemos comentado, a nivel interno casi todo se almacena Esta tabla relaciona los trminos con las taxonomas a las que
como un post. Por tanto, esta es la tabla que contiene la mayor pertenecen
parte de la informacin de nuestra web.

wp_users
wp_comments
Contiene la lista de usuarios de nuestra web.
Almacena los comentarios, relacionndolos con su autor (si estaba
logueado), el post comentado y el comentario "padre" en caso de
ser una respuesta. wp_commentmeta, wp_ postmeta, wp_termmeta, wp_usermeta

Contienen metadatos relativos a comentarios, posts, trminos


wp_terms de taxonomas y usuarios. Estos metadatos muchas veces
son generados por plugins que necesitan almacenar su propia
Almacenas las categoras y etiquetas y cualquier otro trmino informacin relativa a estos registros.
relativo a una taxonoma que usemos para clasificar nuestra
informacin.
wp_options

wp_term_taxonomy Almacena las opciones configuradas desde el panel de


administracin (WP-Admin). Esto incluye las opciones propias del
Desarrollar en WordPress | TELEFNICA // 12

ncleo como las de los plugins y temas (incluyendo cuales estn


activados).

wp_links

Antes de la versin 3.5, Wordpress contaba con una seccin de links


para construir lo que se conoce como un blogroll12. Sin embargo
las versiones actuales han delegado este servicio a un plugin
opcional13, por lo que, salvo que lo instalemos, esta es una tabla
que no vamos a usar.

12 https://es.wikipedia.org/wiki/Blogroll
13 https://codex.wordpress.org/Links_Manager
Desarrollar en WordPress | TELEFNICA // 13

2.2 Query & Loop


El llamado "Loop" es una de las partes principales de las pginas <?php
de Wordpress. Es la parte que se usa para mostrar cada uno de
if ( have_posts() ) {
los posts14, independientemente del tipo de pgina en la que nos
encontremos. while ( have_posts() ) {
the_post();
Como su nombre indica se trata bsicamente de un bucle, que
recorre los posts a manejar (ya sean varios o uno solo) y acta // Contenido de cada post
sobre cada uno de ellos de la forma que se precise. As es como se
}
presenta habitualmente el Loop:
} else {
<?php if ( have_posts() ) : while ( have_posts() )
// Alternativa si no hay post que mostrar
: the_post(); ?>
}
<!-- Contenido de cada post -->
El condicional y el bucle en s no tienen complejidad. Solo es preciso
<?php endwhile; else: ?>
saber lo que hacen las funciones have_posts() y the_post().
<!-- Alternativa si no hay post que mostrar -->
/wp-includes/query.php
<?php endif; ?>
...
La lectura no es lo ms clara posible, ya que abre y cierra la etiqueta
de php muchas veces y en una sola linea (la primera) llama a una function have_posts() {
funcin dentro de un bucle while que a su vez est contenido en un
global $wp_query;
condicional. Veamos su cdigo ms claramente.
return $wp_query->have_posts();
14 Entendidos en sentido general, no solo "artculos" sino tambin }
pginas, etc.
Desarrollar en WordPress | TELEFNICA // 14

... WP_Query
function the_post() {
La variable global $wp_query es una instancia de la clase WP_
global $wp_query; Query que est definida en el mismo archivo wp-includes/query.
php. WordPress.
$wp_query->the_post();
} Esta clase de ms de 4000 lneas de cdigo y comentarios es la que
se encarga de realizar las consultas a base de datos y almacenar el
El nombre have_posts resulta bastante descriptivo y esperamos resultado en la variable global $wp_query.
que nos diga si hay posts que mostrar. Pero al consultar la
informacin de sta y de la funcin the_post, vemos que ambas Cuando accedemos a una direccin de WordPress, ya sea para
se encuentran definidas en el mismo archivo (wp-includes/query. consultar una pgina esttica, leer una entrada especfica, o
php) y que estn llamando a mtodos una variable global llamada consultar el archivo de entradas para una determinada categora,
$wp_query. WordPress realiza automticamente la consulta necesaria a la base
de datos.
La referencia de estas funciones nos indica donde podemos
encontrar eso mtodos.15 16 Si, por ejemplo, queremos ver todas las entradas categorizadas
como "tecnologa", el sistema lo detectar gracias a la url y
rescatar los ltimos artculos17 de esa categora. La propia
consulta, sus resultados e informacin extra se guardan en la
variable $wp_query, que queda preparada para ser usada en el
"Loop".

En cada iteracin del bucle, otra variable global llamada $post


va tomando los datos de cada uno de los posts a mostrar18
permitiendo acceder a ellos fcilmente desde las plantillas.

17 El nmero de artculos a solicitar a base de datos vendr determinado


15 https://developer.wordpress.org/reference/functions/have_posts/#uses por lo indicado desde el WP-Admin.
16 https://developer.wordpress.org/reference/functions/the_post/#uses 18 A travs del mtodo the_post()
Desarrollar en WordPress | TELEFNICA // 15

Si ests trabajando con una instalacin local de Wordpress puedes // Posts con la etiqueta "codigo" de 5 en 5
probar a imprimir el contenido de $wp_query. Tambin puedes
$query = new WP_Query( array( 'tag' => 'codigo' ),
probar a mostrar el valor de $post dentro del bucle (Loop) y como
'posts_per_page' => 5 );
este cambia con cada iteracin19.

Pero la clase WP_Query no solo nos facilita acceder al contenido


// pginas hijas de la pgina con id 4222
principal solicitado por el usuario (pgina/artculo o listado), sino
que nos permite realizar cualquier otra consulta en diferentes $query = new WP_Query( array( 'post_type' => 'page',
momentos. As podremos, por ejemplo, mostrar en la pgina de 'post_parent' => 42 ) );
un artculo un listado con otros artculos relacionados, o listar
las ltimas entradas en una barra lateral (sidebar) o en el pie de
pgina20. Veamos un ejemplo en el que buscamos // pginas que no son hijas ordenadas por ttulo
$query = new WP_Query( array( 'post_type' =>
Para conocer todo lo necesario sobre esta clase es conveniente
revisar su documentacin21. Veamos unos ejemplos de uso: 'page', 'post_parent' => 0, 'order' => 'ASC',
'orderby' => 'title' ) );
19 Puedes usar la variable var_dump() en la pgina index.php de
la plantilla que ests usando (ejemplo: wp-content\themes\ Hay que tener en cuenta que al hacer esto, estaremos
twentysixteen\index.php). Recuerda devolver despus la pgina a su sobreescribiendo el valor que tuviera $query. Si no queremos
estado original. cambiar su valor crearemos una nueva variable (con otro nombre).
Si ests trabajando en un servidor accesible por los usuarios usa
un sistema de logs para consultar esta informacin sin mostrarla
directamente en el navegador.
20 Por ahora solo necesitas tener una idea de lo que hace, pero si mas
adelante quieres conocer ms a fondo WP_Query puedes leer una
serie de artculos dedicados a esta clase en:
https://code.tutsplus.com/series/mastering-wp_query--cms-818
(Los primeros de la serie disponen de una traduccin al espaol,
accesible desde la cabecera de los artculos) 22 El id de cualquier elemento se puede saber consultando la url en su
21 https://codex.wordpress.org/Class_Reference/WP_Query pgina de edicin de WP-Admin (o consultando la base de datos)
Desarrollar en WordPress | TELEFNICA // 16

3 Hooks
La forma en la que una pieza de cdigo interacta con otra en WordPress son los hooks. Los usan los plugins para
interactuar con el ncleo de la plataforma o con otros plugins, pero tambin se usan dentro del propio ncleo para
relacionar unas partes con otras. Son eventos disparados por acciones y filtros, que nos permiten asociar nuestras
propias funciones.

3.1 Acciones (Actions)


Las acciones nos permiten agregar o quitar cdigo en diferentes incluido en la documentacin24.
puntos de la ejecucin. Para aadir nuestro propio cdigo en una
determinada accin usaremos la funcin add_action23 indicando el Veamos como podramos, mediante la accin save_post25, enviar
nombre del filtro al que se "enganchar" y el nombre de la funcin un email al administrador cada vez que alguien aada o edite un
que se ejecutar. post.

Como parmetros adicionales podemos indicar la prioridad (para add_action( 'save_post', 'myplugin_save_post', 10,
indicar el orden de ejecucin en caso de que haya varios funciones
3 );
asociadas al filtro), y el nmero de argumentos que aceptar la
funcin. function wpdocs_my_save_post( $post_ID, $post,
$update ) {
add_action( string $tag, callable $function_to_add,
// Enviar email
int $priority = 10, int $accepted_args = 1 )
}
El listado completo de acciones disponibles en el ncleo est
24 https://codex.wordpress.org/Plugin_API/Action_Reference
23 https://developer.wordpress.org/reference/functions/add_action/ 25 https://developer.wordpress.org/reference/hooks/save_post/
Desarrollar en WordPress | TELEFNICA // 17

3.2 Filtros (Filters)


Los filtros nos permiten modificar los datos que procesa add_filter( 'body_class', 'myplugin_add_body_class'
Wordpress. Al contrario que las acciones, no nos permiten aadir
);
ni eliminar cdigo. Solo podemos reemplazar datos (generalmente
variables). function myplugin_add_body_class($classes) {
$classes[] = "weekday" . date("w");
Podemos aadir nuestro propio cdigo a un filtro mediante la
funcin add_filter26, que es llamada de la misma forma que add_ return $classes;
action, pero que debe asociarse a un filtro en lugar de a una accin
}
add_filter( string $tag, callable $function_to_add,
La funcin del ejemplo se asocia al filter hook llamado body_class28.
int $priority = 10, int $accepted_args = 1 ) Este hook pasa a nuestra funcin el listado de clases de la etiqueta
<body> por medio del argumento $classes. Y nuestra funcin
El listado ntegro de filtros de WordPress puede consultarse en la agrega una clase extra que indica el da de la semana en el que nos
documentacin27. encontramos29.

Por ejemplo, podemos tomar las clases que tiene la etiqueta


<body> de una pgina de WordPress y filtrarlas, aadiendo o
eliminando alguna clase.

28 https://developer.wordpress.org/reference/hooks/body_class/
29 La funcin date de PHP devuelve la fecha/hora actual formateada
segn el argumento que pasemos. En este caso, dado que la "w"
referencia al da de la semana en formato decimal, obtendremos un
26 https://developer.wordpress.org/reference/functions/add_filter/ nmero entre el 0 (domingo) y el 6 (sbado). Ms informacin:
27 https://codex.wordpress.org/Plugin_API/Filter_Reference http://php.net/manual/es/function.date.php
Desarrollar en WordPress | TELEFNICA // 18

4 Dnde aadir nuestro cdigo


Cada vez que vayamos a aadir cdigo a nuestro WordPress Plugins
debemos plantearnos dnde debe ir ese cdigo. En ocasiones,
hay varios sitios donde podemos colocar nuestro cdigo para que Los plugins son independientes de los temas, por lo que si
funcione. Es importante conocer las diferencias entre extender queremos aadir un comportamiento y que este se pueda
nuestro Wordpress de una forma u otra. mantener independientemente del tema que usemos
probablemente esta sea una opcin a considerar. Hay que tener en
Incluso aunque estemos siguiendo un manual, debemos cuenta que los plugins pueden activarse y desactivarse a voluntad
plantearnos si la forma en la que se acta en l es la ms prctica en el panel de administracin, lo cual aporta un control extra. Si
para nosotros en nuestra situacin. Veamos las ubicaciones cometemos algn error en el cdigo de un plugin, wordpress lo
habituales para nuestro cdigo en WordPress: deshabilitar pero la web funcionar sin problema.

Existe un tipo de plugins especial que no aparecen en el listado


functions.php junto con el resto y por lo tanto no pueden desactivarse. Estos
plugins de uso obligatorio (Must Use Plugins)30 se instalan y activan
Este archivo forma parte de cada tema de wordpress. Nos permite al copiarlos en el directorio "wp-content/mu-plugins".
extender funcionalidad, pero debemos tener en cuenta que, al
tratarse de un archivo dependiente de un tema especfico, las
modificaciones que hagamos se perdern si se cambiamos de
tema. Probablemente esta sea la mejor opcin cuando aadamos
algo con un fuerte componente visual, muy asociado al tema en
concreto. Hay que tener en cuenta que si cometemos algn error
en este archivo es probable que no podamos acceder a nuestro
wordpress (nos aparecer la pgina en blanco)

30 https://codex.wordpress.org/Must_Use_Plugins

Potrebbero piacerti anche