WP_Query: Excluir el post actual

Este post va a ser rápido y además, fácil, sencillo y para toda la familia.

Si no conoces o no has trasteado nunca con la Query de WordPress, te aconsejo que lo hagas más pronto que tarde.

La función WP_Query() de WordPress es una herramienta fantástica que nos permite modificar el loop por defecto con diferentes argumentos.

Como la Query de WordPress daría para muchos posts, si os parece vamos a ver el código necesario para el caso en el que queremos excluir el post actual de dicha query.

Para ello utilizaremos ‘post__not_in’ en los argumentos que le pasaremos al nuevo objeto de WP_Query y en el caso que nos ocupa lo estableceremos como «array (get_the_ID())«.

Claro que podemos recoger antes el ID y guardarlo en un variable pero creo que así se ve más claro.

A continuación os dejo el código de un ejemplo sencillo para que podáis copiarlo y probarlo cuando queráis.

Cualquier cosa, ya sabéis, me la comentáis. Ya sabéis que me podéis encontrar en Twitter como @oabadfol

Guía de la base de datos de WordPress

Si nos dedicamos a cualquier cosa relacionada con WordPress o tenemos pensado hacerlo, no podemos dejar de lado la comprensión de su base de datos. Dependiento del nivel en el que nos movamos, tendremos que ahondar más o menos en su comprensión pero en cualquier caso, nunca está de más conocer sus tablas y cómo está estructura.

En esta guía voy a intentar resumir la estructura de de la base de datos de WordPress de manera que sea lo más comprensible posible para todos y todas.

Espero que esta guía os sea de ayuda y os anime un poco a profundizar en el desarrollo WordPress y en su comprensión.

Antes de Empezar

Antes de empezar a ver cada una de las partes, tablas, etc… de la base de datos de WordPress, vamos a comentar lo que necesitamos par poder seguir esta guía y verlo con nuestros propios ojos a la vez que seguimos la guía.

En mi caso parto de:

  • Una instalación nueva de WordPress sin modificaciones.
  • Instalado PHP 7 en el servidor.
  • Acceso a phpMyAdmin.

Conocimientos necesarios:

Aunque creo que en este caso no es necesario un mínimo conocimiento de WordPress para ententer lo que vamos a comentar, si que creo que lo ideal sería:

  • Conocimientos básicos sobre WordPress y su estructura: posts, páginas, comentarios, etc…
  • Conocimientos sobre bases de datos: tablas, filas, campos, etc..

Estos no son requisitos imprescindibles.

Las tablas de la base de datos de WordPress

Cuando instalamos WordPress se crean 12 tablas iniciales que son las que vamos a explicar en esta guía.

Nota: Ante de continuar debemos saber que no deberíamos utilizar el prefijo por defecto que nos ofrece WordPress que no es otro que «wp_«. Deberíamos cambiarlo por otro por motivos de seguridad. Para esta guía he utilizado el prefijo por defecto por motivos didácticos.

Tras realizar una instalación de WordPress sin nada más, nos econtraremos estas tablas en nuestro phpMyAdmin:

Esta es la estructura de tablas que nos vamos a encontrar en una nueva instalación de WordPress.

A continuación vamos a resumir un poco cada una de las tablas para más adelante pasar a detallarlas un poco más cada una de ellas.

Las 12 tablas de WordPress
wp_commentmetaEsta tabla contiene contenido adicional sobre los comentarios.
wp_commentsAquí están los datos de los comentarios.
wp_linksEsta tabla está obsoleta desde la versión 3.5 de WordPress. Aquí se almacenan o almacenaban los enlaces.
wp_optionsAquí se almacenan los datos de configuración de WordPress además de datos sobre configuración de plugins, temas, etc..
wp_postmetaInformación relacionada con los posts. Esta tabla está relacionada con la tabla wp_posts.
wp_postsSe almacena todo el contenido de WordPress como entradas, páginas, ficheros, etc…
wp_termmetaMetadados relacionados con las categorías.
wp_termsAquí se almacenan las categorías y etiquetas.
wp_terms_relationshipsEn esta tabla se establece la relación entre los posts con las categorías, etiquetas, etc..
wp_term_taxonomyEstablece las características de las taxonomías como las entradas, páginas, etc…
wp_usermetaTabla con información adicional sobre los usuarios de la tabla wp_users.
wp_usersEn esta tabla es donde se almacenan todos los usuarios con su información básica como contraseña, email, etc..

Con esta breve explicación ya nos podemos hacer una idea de la estructura de la base de datos de WordPress y hacerno una idea que dónde se almacenan algunos datos aunque lo veremos un poco mejor más adelante en esta guía.

Relaciones entre las tablas de la base de datos

Para comprender un poco mejor la estructura de la base de datos de WordPress debemos entender cómo están relacionas entre ellas.

A continuación podemos ver un esquema de las relaciones entre las tablas obtenido del codex de WordPress.org.

En la imagen anterior podemos ver graficamente las relaciones entre las tablas de la base de datos de WordPress en sus últimas versiones.

Detallaremos un poco más la relación de cada una de las tablas más adelante en esta guía.

Detalle de cada una de las tablas

 

Tabla wp_commentmeta

Como ya hemos comentado anteriormente, en la tabla wp_commentmeta se almacenan los datos adicionales de o sobre los comentarios que se almacenan en una instalación de WordPress.

Estructura de la tabla wp_commentmeta:

Como podemos ver en la imagen anterior esta tabla es muy sencilla y sólo tiene 4 campos:

Campos tabla wp_commentmeta
meta_idId principal de la tabla
comment_idId del comentario (tabla wp_comments)
meta_keyClave del valor
meta_valueMeta o valor del campo

Destacaremos que el cambio comment_id hace referencia al id de la tabla wp_comments por lo tanto queda claro que ambas están relacinonada a través de este campo.

Obtener datos de la tabla wp_commentmeta

Para obtener datos de la tabla wp_commentmeta podemo utilizar la función get_comment_meta() que nos devolverá el campo meta de un comentario.

metacomentario = get_comment_meta( $comment->comment_ID, 'mimeta', true );

Tabla wp_comments

Esta es la tabla donde se almacenan o guardan los comentarios que se han realizado en nuestro WordPress. Tanto los comentarios que se han aprobado como los que no han sido aprovados.

Estructura de la tabla wp_comments:

Campos tabla wp_comments
comment_IDId del comentario
comment_post_IDId del post (tabla wp_posts)
comment_authorAutor del comentario
comment_author_emailEmail del autor del comentario
comment_author_urlUrl del autor del comentario
comment_author_IPIp del autor del comentario
comment_dateFecha y hora del comentario
comment_date_gmtFecha y hora del comentario (gmt)
comment_contentContenido del comentario
comment_karmaMeta o valor del campo
comment_approvedAprobación del comentario (0, 1 o spam)
comment_agentBrowser, sistema operativo, etc..
comment_typeTipo (pingback | trackback)
comment_parentComentario padre del actual
user_idid del usuario si está registrado

Obtener datos de la tabla wp_comments

Para obtener datos de la tabla wp_comments podemo utilizar la función get_comments() que nos devolverá el campo meta de un comentario.

<?php
  // Mostrar por pantalla los autores de los comentarios del post con id 15
  $commentarios = get_comments('post_id=15');
  foreach($comments as $comment) :
	echo($comment->comment_author);
  endforeach;
?>

Tabla wp_links

Esta tabla se utilizaba en veriones anteriores pero se dejó de utilizar. Antes se utilizaba para la gestión de los enlaces.

Si necesistamos o queresmos volver a utilizar esta característica de WordPress la podemos seguir usando si instalamos el plugin «Link Manager«.

No se muestran detalles de esta tabla por que no se utiliza normalmente.

Para obtener más información sobre la tabla wp_links podemos visitar este enlace.

Tabla wp_options

Como ya hemos comentado al principio de esta guía en esta tabla se guardarán y gestionaran las opciones de nuestra instalación de WordPress.

Esta tabla es algo especial puesto que, en principio, no tiene ninguna relación con ningun otra tabla de la base de datos de WordPress.

Enl a siguiente captura podemos ver la tabla completa que crea WordPress tras la instalación.

Estructura de la tabla wp_options:

Esta tabla, como podemos ver, solo tiene 4 campos o filas.

Campos tabla wp_options
option_idId de la opción
option_nameNombre de la opción
option_valueValor de la opción
autoloadSi la opción se carga automaticamente

Obtener datos de la tabla wp_options

// Obtener el email del administrador
$admin_email = get_option( 'admin_email' );

 

Tabla wp_postmeta

Cada meta data de un post se almacena en la tabla wp_postmeta.

Algunos plugins también pueden utilizar esta tabla para guardar su propia información.

Estructura de la tabla wp_postmeta:

Campos tabla wp_postmeta
meta_idId de la información (meta)
post_idId del post asociado
meta_keyClave del meta
meta_valueValor del meta (información)

Obtener datos de la tabla wp_postmeta

// Obtener la información adicional o meta del post actual a través de su ID
$meta = get_post_meta( get_the_ID() );

Tabla wp_posts

Aunque todas las tablas de la base de datos son muy importantes, la tabla wp_posts es por lo menos una de las más imporntes sino la más importante.

Debemos tener en cuenta que aquí, en la tabla wp_posts se almacena la información de los posts de WordPress lo que incluye entradas, páginas, etc…

Estructura de la tabla wp_posts:

Campos tabla wp_posts
IDId de la información (meta)
post_authorAutor del post
post_dateFecha del post
post_date_gmtFecha del post (gmt)
post_contentContenido del post
post_titleTítulo del post
post_excerptExtracto del post
post_statusEstado del post (publicado, borrador, etc..)
comment_statusEstado comentarios (abiertos?)
ping_statusEstado de los pings (abiertos?)
post_passwordContraseña del post
post_nameNombre del post
to_pingUrl a la que enviar pingback
pingedUrl a la que se ha enviado pingback
post_modifiedFecha y hora de modificarción del post
post_modified_gmtFecha y hora de modificarción del post (gmt)
post_content_filteredUsado por algunos plugins de cache para guardar uan versión en caché
guidUrl permanente al post
menu_orderNúmero de orden en el menu
post_typeTipo de post (post, page…)
post_mime_typeEl Mime type de los ficheros subidos
comment_countNúmero de comentarios del post

Obtener datos de la tabla wp_posts

// Obtener los últimos 15 posts
$args = array(
  'numberposts' => 10
);
 
$latest_posts = get_posts( $args );

Tabla wp_termmeta

En este tabla se almacenan los metadatos relacionados con las categorías.

Estructura de la tabla wp_termmeta:

Campos tabla wp_termmeta
meta_idId de la información (meta)
term_idId del término
meta_keyClave del meta
meta_valueValor del meta (información)

Obtener datos de la tabla wp_termmeta

// Obtener el valor del término 'color'
$color = get_term_meta( $term_id, 'color', true );

Tabla wp_terms

En la tabla wp_terms se guardan tanto las categorías como las etiquetas para los posts y páginas.

Estructura de la tabla wp_terms:

Campos tabla wp_terms
term_idId de término
nameNombre del término
slugSlug del término
term_groupAgrupación de terminos (alias)

Obtener datos de la tabla wp_terms

// Obtener todas la información de los términos de la categoría con ID 1
$term = get_term( 1 , 'category' );
echo $term->name;

Tabla wp_term_relationships

Los posts están relacionados con categorías y etiquetas por la tabla wp_terms y esta asociación es mantenida en la tabla wp_term_relationships.

Estructura de la tabla wp_term_relationships:

Campos tabla wp_term_relationships
obtect_idId de término
term_taxonomy_idNombre del término
term_orderSlug del término

Obtener datos de la tabla wp_term_relationships

// Devuelve una lista de términos de taxonomía de productos que se aplican a $post
$product_terms = wp_get_object_terms( $post->ID,  'product' );
 
if ( ! empty( $product_terms ) ) {
    if ( ! is_wp_error( $product_terms ) ) {
        echo '<ul>';
            foreach( $product_terms as $term ) {
                echo '<li><a href="' . esc_url( get_term_link( $term->slug, 'product' ) ) . '">' . esc_html( $term->name ) . '</a></li>'; 
            }
        echo '</ul>';
    }
}

Tabla wp_term_taxonomy

Esta tabla almacena la información que describe la taxonomía como categorías, tags, cpt... para las entradas de la tabla wp_terms.

Estructura de la tabla wp_term_taxonomy:

Campos tabla wp_term_taxonomy
term_taxonomy_idId del témino de taxonomía
term_idId del término
taxonomyNombre de la taxonomía
descriptionDescripción
parentPadre
countNúmero

Tabla wp_usermeta

En la tabla wp_usermeta se almacenan datos adicionales de los usuarios.

A continuación podemos ver el contenido de la tabla wp_usermeta tras la instalación de WordPress:

Estructura de la tabla wp_usermeta

Campos tabla wp_usermeta
umeta_idId de la tabla
user_idId del usuario (tabla wp_users)
meta_keyClave de la información o meta
meta_valueValor de la información o meta

Obtener datos de la tabla wp_usermeta

// Obtener y mostrar toda la información meta de un usuario a través de su id
<?php
  $metauser = get_user_meta( 1 );
  print_r( $metauser );
?>

Tabla wp_users

Como su nombre indica, aquí se almacenan los datos de los usuarios: nombre, email, etc

Esta tabla está directamente relacionada con la tabla wp_usermeta.

Estructura de la tabla wp_users:

Campos tabla wp_users
IDId del usuario
user_loginLogin o username para acceder
user_passContraseña del usuario (encriptada)
user_nicenameNombre del usuario que se muestra
user_emailEmail del usuario
user_urlCampo url del usuario
user_registeredFecha y hora en que se registró el usuario
user_activation_keySe usa para reestablecer las contraseñas
user_statusSe usaba antes
display_namenombre del usuario elegido para mostrar (user_login, user_nicename…)

Obtener datos de la tabla wp_users

// Obtener una lista de todos los usuarios con el nombre 'oscar'
$usuarios_oscar = get_users( array( 'search' => 'oscar' ) );

Conclusión

Si habéis llegado hasta aquí es que le habeis prestado algo de atención a esta guía.

Ya se que no es lo más detallada que cabría esperar pero la idea es dar una base, unas pinceladas sobre las que ahora podréis trabajar vosotros, hacer pruebas y sacarle el mayor partido posible a el desarrollo con WordPress.

El conocimiento de la base de datos de WordPress nos va a ayudar muchísimo, nos va a abrir algunas puertas que si no supiéramos cómo funciona nos costaría más llevarlo a cabo.

Para terminar, espero que os sea de ayuda lo máximo posible.

Saludos y hasta la próxima!

Crear un post de WordPress con código

Hoy vamos a ver cómo crera un post mediente código.

Algo que a simple vista puede no tener ningún sentido pero que si lo pensamos detenidamente puede que existan circunstancias en las que será necesario utilizar esto como parte de un plugin o código más extenso.

Es el ejemplo que me ocupa ahora mismo en uno de los proyectos en los que estoy trabajando que no es otro que crear contenido de un tipo de contenido personalizado a partir de los datos que se solicitan a la base de datos. No voy a comentar más sobre esto porque luego todo se sabe…

Bueno, a lo que vamos…

wp_insert_post()

La función que vamos a utilizar para crear un post en este caso es wp_insert_post(). Como su nombre indica o podemos intuir, nos va a permitir insertar o crear un post.

Teneís información sobre la función wp_insert_post() en este enlace.

Como vamos a hacerlo sencillo os pongo un ejemplo a continuación y luego lo comentamos un poco:

Si probáis el código anterior, tened cuidado y hacedlo en un sitio en desarrollo o mejor de pruebas en local. Os digo esto porque aunque el código hace lo que tiene que hacer, no hemos incluído ningún check para saber si ya existe un post como el que estamos creando y por consiguiente se crearán posts iguales constantemente.

Yo he hecho la prueba para que os hagáis una idea y lo podéis ver en la siguiente captura:

Esto es sólo de un momento, unos 20 segundos, si le dejo más tiempo, seguirá creando posts y posts. Un sin parar, vamos…

Bien, ahora analicemos un poco la función que hemos usado.

Hemos usado varias variables para que guarden el contenido que queremos para usarlas dentro del array. Estas variables contendrásn la ID del autor, el slug, el título y el contenido del post: $author_id, $slug, $title, $content.

Postermiormente utilizamos la función wp_insert_port() para crear el post con el contenido que queremos usar dentro de un array.

No creo que haga falta mucha explicación porque se reconocen bastante bien las diferente opciones.

Comprobar si el post ya existe

Para este caso voy a crear una función que compruebe o más bien compare el slug del post que quiero crear con todos los slugs que ya hay creados. Es más, en esta función le especifico que mire sólo en posts.

Podríamos usar esto también con custom posts types osea que ahí queda eso. Pero como digo, para este ejemplo lo haremos con posts.

El código de la función que os comento es el siguiente:

Como podéis observar, mediante el array le pasamos los datos de los posts que queremos que chequee.

Esta función no tiene mucho más misterio, simplemente hace na consulta de todos los posts que cumplan los argumentos que le pasamos en el array.

Esta función es la que vamos autilizar para completar nuestro snippet.

El código completo

Una vez que hemos creado las dos partes que van a componer este snippet, las juntamos y añadimos un condicional para que chequee si el slug ya existe si no existe creará el post con los datos que le indicamos en el array y si ya existe no lo creará.

Ah, bueno, algo muy importante… el hook.

El hook que usaremos será «after_setup_theme» y es en ese hook donde ejecutaremos la función que creará el post.

Aquí tenéis el código comleto para vuestro uso y disfrute:

Y el resutado, como era de esperar será el siguiente:

Sin mas, nos vemos en el siguiente.

Aplicar CSS personalizado en el área de administración de WordPress

Hacía tiempo que no tenía necesidad de hacer esto pero estos días he tenido que hacer unas modificaciones en el área de administración de WordPress para que algunas cosas estén mejor para un cliente porque en este caso el cliente va a gestionar y hacer diferentes cambios en su web periodicamente.

Pues bien, al grano…

Para poder inyectar css que tenga efecto en el área de administración de WordPress deberemos utilizar el hook: ‘admin_head‘. A partir de aquí, comenzamos a hacer las pruebas.

Como siempre, hay varias formas de hacer una cosa por lo que la manera más sencilla de añadir css al área de administración de WordPress sería algo como lo siguiente:

La manera anterior es totalmente válida pero a mi personalmente me gusta tener las cosas bien ordenadas y en fichero diferentes por lo que ahora lo que voy a hacer es crear un fichero dentro del directorio «css» del tema hijo para estos cambios relativos al área de administración.

Para ello utilizaré el hook ‘admin_enqueue_scripts’ y creamos la función que añadirá el fichero css que ya hemos creado en el directorio ‘css’ de nuestro tema hijo.

Y hasta aquí llega el tutorial de hoy. Espero que os sea de utilidad.

Saludos y hasta la próxima!

Cómo ocultar los errores y avisos de PHP en WordPress

En ocasiones, por el motivo que sea es posible que se muestre algún mensaje de error o aviso de PHP en nuestras páginas o entradas de WordPress y la verdad es que queda muy feo.

Antes de continuar hay que tener en cuenta que los errores y avisos están para algo, para hacerles caso  e intentar resolverlos pero también debemos hacer algo rápidamente para que los visitantes no vean estos errores o avisos mientras nosotros procuramos solucionarlos lo ante posible.

Teniendo en cuenta esto, nos ponemos en la situación que por ejemplo, después de instalar o actualizar un plugin nos muestra un mensaje de error como por ejemplo algo similar a esto:

Warning: Cannot modify header information - headers already sent by xxxx 
(output started at xxxxruta/de/nuestro/wordpress/header.php:59) in /otra/ruta/...xx/fichero.php

Como no queremos que se muestre este mensaje de error, vamos a ocultar todos los mensajes y avisos de php para que no se muestren, por lo menos mientras lo vamos solucionando.

El fichero wp-config.php

Si nos fijamos en el fichero ‘wp-config.php‘ de nuestro WordPress seguramente veremos la siguiente línea:

define('WP_DEBUG', false);

Como este «define» no nos está solucionando el problema que tenemos, lo que vamos a hacer es eliminar esa línea de define para añadir las siguiente líneas en nuestro ‘wp-config.php‘:

ini_set('log_errors','On');
ini_set('display_errors','Off');
ini_set('error_reporting', E_ALL );
define('WP_DEBUG', false);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);

Añadimos estas líneas, guardamos el fichero y lo subimos a su directorio, refrescamos el navegador y es muy probable que ya no veamos los mensajes de error que nos aparecían hace un momento.

 

Espero que esto os sea de ayuda en esos momentos de tensión en los que aparece un mensaje de error de este tipo y  no sabemos por donde tirar.

Eso si, os recuerdo que los mensajes de error de php deben estar activados, ok? En cuanto lo solucionéis, volvéis a dejarlo como estaba y listo.

Venga, saludos y hasta la próxima!

 

Añadir texto al título de los entradas en WordPress dependiendo de la categoría

Si queremos añadir texto al título de los las entradas de WordPress de una categoría específica, aquí te explico una manera de hacerlo.

Nos ponemos en situación

Para ponernos en situación pongamos que tenemos una página web de una inmobiliaria donde vamos poniendo anuncios de pisos en venta, en alquiler, vendido, alquilado, etc

De momento lo estamos gestionando con categorías que podrían ser las que he comentado:

  • En venta.
  • En alquiler.
  • Vendido.
  • Alquilado.

Cada vez que publicamos un piso en venta le ponemos un título en plan: Piso de 90 metros cuadrados en el centro. Por poner un ejemplo.

Después rellenamos todo el contenido que necesitemos y le asignamos por ejemplo la categoría «En venta«.

¿Qué queremos hacer?

Pues bien, lo que queremos es que a partir de ahora cuando una entrada tiene establecida la categoría «En venta» se modifique el título de la entrada para que los visitante vean el título siguiente: «EN VENTA: titulo….«.

Es sólo un ejemplo para que lo entendamos pero habría que hacer lo mismo con el resto de categorías para que cuando un piso «en venta» se venda y le asignemos la categoría «Vendido«, el título que se muestre sea: «VENDIDO: título…«.

Para que nos quede claro, no queremos que se modifique el título en si, ok? Porque cuando cambiemos de categoría sería más complejo ya que tendríamos que quitar el texto existente del comienzo y luego añadir el nuevo correspondiente a la categoría.

¿Cómo lo vamos a hacer?

Voy a intentar hacerlo lo mas sencillo posible para que lo entendamos bien.

En primer lugar damos por sentado que ya tenemos creadas las categorías que hemos comentado antes.

Ahora vamos a crear una función que insertaremos en el fichero functions.php de nuestro tema en la que comprobaremos con un «if» si el post tiene asignada una categoría de las que nos interesan y si es así que añada el texto que queremos al inicio del título y que devuelva esa cadena.

Para el ejemplo de la categoría «en venta» quedaría así:

if( in_category( 'en venta') ) {
   $title = 'EN VENTA: ' . $title;
}

Se entiende bien ¿verdad?

Ahora bien, tendríamos que hacer un «if» como el anterior para cada categoría. Por supuesto hay maneras mejores de hacerlo como por ejemplo con un Switch pero bueno, en este tutorial lo hacemos con varios «if» para que se entienda mejor.

Como digo, para el caso de la categoría «vendido«, el if quedaría así:

if( in_category( 'vendido') ) {
     $title = 'VENDIDO: ' . $title;
}

¿Lo tenemos claro? Pues sigamos…

La función

Ahora que ya hemos visto y entendido el funcionamiento básico, vamos a crear la función que contendrá los «if» y que devolverá el título modificado.

La función la vamos a llamar: «modificar_titulo_por_categoria» y quedaría así:

function modificar_titulo_por_categoria( $title, $id ) {
     if( in_category( 'en venta') ) {
          $title = 'EN VENTA: ' . $title;
     }
     
     if( in_category( 'vendido') ) {
          $title = 'VENDIDO: ' . $title;
     }
     return $title;
}

El código completo

Ya casi lo tenemos, lo único que nos falta es añadir un filter que ejecute la función que acabamos de crear.

Usaremos el filtro ‘the_title‘, como no.

Bien, pues para no demorarnos más, aquí tenéis el código completo con esas dos categorías de ejemplo que hemos comentado.

https://gist.github.com/OscarAbadFolgueira/a235b1bc6e48768b5e29fc8f2472c47f

Ya sabes, lo puedes copiar y pegar en el fichero functions.php de tu tema WordPress y modificarlo a tu gusto.

Y aquí podéis ver el resultado:

¿Quieres un plugin?

Para terminar te comento que si necesitas un plugin que haga algo similar a lo que hemos comentado en este artículo, no dudes en comentármelo a través del formulario de contacto. Explícame bien lo que necesitas para que yo lo tenga claro, ok?

Venga, pues sin más, nos vemos en el siguiente!!

Crear Shortcode para restringir partes del contenido – Parte 2

Crear Shortcode para restingir el acceso a partes del contenido - Parte 2

Continuamos con el tutorial o guía sobre cómo crear un shortcode para restringir partes del contenido – Parte 2.

Recordemos…

Recordamos dónde lo dejamos antes de nada, ok?

¿Qué vamos a hacer ahora?

En esta segunda parte de esta guía vamos a darle un poco de estilo al mensaje.

Si os fijáis, no le hemos dado ningún estilo por lo que queda un poco «soso», ¿Verdad?

mensaje de aviso - contenido restringido

En la image anterior se ve claramente que es muy posible que el usuario ni se de cuenta del mensaje.

Es por eso que vamos a darle un poco de estilo para que se vea mejor. Vamos allá!

Añadir estilo forma 1

La forma más sencilla aunque menos aconsejable sigue siendo añadir los estilos css en el mismo código html.

Como digo no es la forma más aconsejable de hacerlo ni la más limpia pero ahora vamos a hacerlo así y después lo haremos en un fichero «.CSS» a parte para que esté todo más limpio y se entienda mejor.

Tampoco vamos a complicarnos mucho la vida con esto por lo que lo que vamos a hacer es darle un tamaño más grande al texto del aviso y un color algo más visible.

Creo que para empezar nos sirve con el siguiente estilo:

<h4 style="color: red;">

No es mucho de momento pero nos va sirviendo para ir comprendiendo el funcionamiento.

Entonces, lo que hacemos es modificar lo siguiente:

return ( 'Upps, Este contenido sólo está disponible para usuarios registrados. Regístrate!');

Por esto otro:

return '<h4 style="color: red;">Upps, Este contenido sólo está disponible para usuarios registrados</h4>';

Como digo, esto es sólo un ejemplo y podemos adaptarlo a nuestras propias necesidades.

Total, que con el cambio que acabamos de realizar deberíamos tener algo así:

mensaje contenido restringido rojo y grande

Bueno, algo mejor está, ¿Verdad?

Ahora yo creo que el usuario se dará cuenta del aviso y lo leerá porque está bien grande y bien rojo.

Para que quede un poco mejor, le voy a añadir un salto de linea. Para que no quede tan justo de espacio con la siguiente línea de texto.

Sin más, añado un <br /> y listo:

Ah, bueno, ya que estamos, lo centramos…

return '<div><h4 style="color: red; text-align: center;">Upps, Este contenido sólo está disponible para usuarios registrados</h4><br /></div>';

Habréis notado que lo he metido en un <div>. Ya veremos porqué en un momentito…

Y va quedando así:

mensaje contenido restringido rojo y grande 3

Yo creo que queda un poco mejor que antes.

Pero no lo dejamos así, vamos a darle otra vuelta más.

Añadir un color de fondo

Eso es. Porque sigue quedando un pelín sosillo, vamos a darle un color de fondo clarito para que se note más el aviso.

Pues eso, toca añadir un «background-color» al estilo del <div>.

Tened en cuenta que yo no soy muy bueno para esto de los colores osea que no me lo tengáis en cuenta, ok?

Ya he elegido este color:

Y con el cambio, la linea quedaría así:

return '<div style="background-color: #F5F2F2;"><h4 style="color: red; text-align: center;">Upps, Este contenido sólo está disponible para usuarios registrados</h4></div>';

Y visualmente:

mensaje contenido restringido rojo y grande 4

Bueno, no está mal. Es diferente.

Notad que he quitado el <br />.

Pero vamos a darle un poco de espacio con un padding:

return '<div style="background-color: #F5F2F2; padding: 5%;"><h4 style="color: red; text-align: center;">Upps, Este contenido sólo está disponible para usuarios registrados</h4></div>';

Y vemos que si, que esto está mejor:

mensaje contenido restringido rojo y grande 5

No queda mal o por lo menos queda algo mejor que antes para que el visitante se de cuenta del aviso.

De momento dejamos aquí y no vamos a hacer más cambios de estilo.

A continuación, el nuevo Snippet:

Ahora vamos a hacer lo mismo pero poniendo todo el CSS en un fichero a parte

Añadir estilo forma 2

Como ya he comentado antes, la forma más limpia y más ordenada de escribir CSS es hacerlo en un fichero a parte.

Para hacer eso tenemos que hacer dos cosas.

  1. Crear el fichero css con nuestros estilos en un fichero para la ocasión.
  2. Inyectar dicho fichero en nuestro plugin.

Este segundo método está mas enfocado a la creación de un plugin puesto que en un plugin añadimos ficheros en los directorios correspondientes.

Claro que si queremos añadirlo en forma de Snippet en nuestro functions.php podríamos hacerlo de la primera forma o si no también podemos añadir el código CSS al fichero style.css.

También podemos hacerlo en un fichero a parte y ubicarlo en nuestro theme. Posteriormente, cuando lo inyectemos tendremos que indicarle bien la url de este fichero.

Pero aquí nos centramos en la creación del plugin y para ello primero creamos el ficheros CSS con los estilos.

Por lo tanto, la línea de retorno la cambiamos y añadimos una clase css así:

return '<div class="oaf_restrict_content"><h4>Upps, Este contenido sólo está disponible para usuarios registrados</h4></div>';

Y ahora el contenido del fichero css «oaf-restrict-partial-content-shortcode.css«:

.oaf_restrict_content {
	background-color: #F5F2F2;
	padding: 5%;
}
.oaf_restrict_content h4 {
	color: red;
	text-align:center;
}

Ya veis que es muy sencillo.

Como ya os digo, podéis modificar a vuestro gusto y necesidades.

Ahora pongo el código del fichero php completo y comento algo a continuación:

<?php
/*
* Plugin Name: OAF Restrict Partial Content Shortcode
* Plugin URI: https://oscarabadfolgueira.com/crear-shortcode-restringir-partes-del-contenido-parte-2
* Description: This plugin creates a 

Continuara…

Claro que si. Aquí no acaba la cosa!

En próximos tutoriales de esta guía vamos a hacer más cosas.

Quiero Feedback

Pues eso, quiero que me comentéis cómo lo veis, que os gustaría que explicara mejor. Si voy muy lento, etc…

Bueno, por hoy lo dejamos aquí y ya seguiremos otro día.

Saludos y mucho ánimo!

Ver parte 1

Crear Shortcode para restringir partes del contenido – Parte 1

Crear Shortcode para restingir el acceso a partes del contenido-parte 1

En esta ocasión vamos a ver cómo crear un shortcode para restringir partes del contenido de nuestras páginas o entradas de WordPress.

¿De qué estamos hablando?

Es posible que nos interese restringir ciertas partes de algunas página o entradas de nuestro blog por los motivos que sean.

Pero qué mejor que poner un ejemplo real, ¿Verdad?

Un ejemplo real

Os pongo el ejemplo de esta misma entrada en esta web.

Como comenté en algún artículo anterior, estamos comenzando una andadura que será larga y muy interesante en los terrenos de WordPress por lo que a parte de comentar y explicar los códigos «Snippets«, también daré la opción de descargar el mismo Snippet en formato plugin para que no tengamos nuestro fichero functions.php con tantas cosas e incluso podamos llegar a perderlo si algún día cambiamos de tema. Que pasará tarde o temprano.

Por lo tanto, al final de esta entrada daré la opción de descargar el plugin en cuestión. Ah! pero eso si! sólo para usuarios registrados.

No hay que preocuparse porque de momento es todo «by the face«. Simplemente quiero saber si esto que estoy haciendo sirve de algo y más adelante puedo montar algunos proyectos que tengo en mente y de los cuales os informaré de antemano.

Entonces el lo que os digo. cierta parte de esta entrada estará restringida a usuarios no registrados.

Esto es lo que vamos a hacer ahora.

La función que maneja el asunto

Eso es, vamos a escribir la función que maneje la lógica de este snippet o plugin.

Creamos una función que en mi caso la llamaré: «oaf-restrict-partial-content-shortcode«. Nada original, ya lo se…

function oaf_restrict_partial_content_shortcode(  ) {
}

Pues nada, ya la tenemos creada. Pero claro, habrá que escribir algo de lógica dentro, verdad?

La idea es que recoja el «contenido» y en función de que el usuario esté logueado o no, muestre una cosa u otra.

Por ejemplo, vamos a comprobar si:

  • El usuario está logueado (tiene que estar logueado para ver el contenido dentro del shortcode).
  • Si el contenido no es «null«. Es decir que tiene contenido.
  • Si no es un «feed«.

Estas son algunas de las comprobaciones que podemos realizar y para este ejemplo nos puede valer.

En posteriores tutoriales volveremos sobre este asunto para ir mejorando lo que hemos hecho.

Entonces, si el usuario está logueado Y el contenido no es «null» Y además no se trata de un «feed«, entonces la función retornará con contenido.

Pero si no es así, si no cumple alguna de las 3 condiciones anteriores, devolverá un texto en plan: «Este contenido sólo es visible para usuarios registrados. Regístrate!«.

Venga, vamos allá.

function oaf_restrict_partial_content_shortcode( $atts, $content = null ) {
	if ( is_user_logged_in() && !is_null( $content ) && !is_feed() ) {
		return $content;
	} else {
		return __( 'Upps! Este contenido sólo está disponible para usuarios registrados.', 'oaf_rpcs' );
	}
}

Es muy sencillo por lo que doy por sentado que se entiende correctamente el código.

Y el Shortcode, ¿Dónde está?

Eso es, nos falta añadir el código o función para crear el Shortcode.

Esto también es sencillo, lo único que tenemos que hacer es utilizar la función:

add_shortcode ();

Ya bueno, pero así sin más no haría nada.

Necesitamos 2 parámetros. Que son:

  • El nombre del Shortcode.
  • La función que gestiona el código del Shortcode.

Entonces:

add_shortcode ('restrict_pcs', 'oaf_restrict_partial_content_shortcode' );

Ahora si, ahora ya lo tenemos todo.

El Snippet completo

Este es el código completo de este Snippet:

Y ahora, como he prometido antes, a continuación disponéis del plugin que realiza lo mismo que el Snippet pero sin tener que incluir nada en nuestro functions.php.

Ya sabéis, lo descargáis y lo instaláis en vuestro WordPress.

Cómo usarlo

Para usar este shortcode que acabamos de crear tenemos que hacer lo mismo que con los demás shortcodes, es decir, introducir el contenido restringido dentro del comienzo y el fin del shorcode.

Por ejemplo. Si queremos restringir:  «Este contenido es super importante y tiene que estar restringido«. Haremos lo siguiente:

[restrict_pcs]Este contenido es super importante y tiene que estar restringido[/restrict_pcs]

Si el usuario está registrado y logueado, no tendrá ningún problema en ver el contenido restringido como muestro en la siguiente captura:

Plugin OAF Restrict Partial Content Shortcode
Plugin OAF Restrict Partial Content Shortcode 2

Ahora bien, si el usuario visitante no no está logueado, es decir, que no tiene cuenta en nuestro WordPress, verá el siguiente mensaje de aviso:

Perfecto. Ya lo veis!!

Bueno, al final este tutorial se a alargado un poco pero me gusta explicar las cosas poco a poco.

¿Y ya está?

Bueno, estar está. Jajaja… Pero no está ni por asomo visible o para andar enseñándolo por ahí.

Es por eso que estoy preparando una guía completa que compelte todo el proceso de la realización de este plugin. Eso sí, algunos contenidos estarán restringidos.

Haremos muchas cosas. Como por ejemplo darle un poco de estilo al mensaje, prepararlo para la traducción a otros idiomas, traducirlo al Español, Crear el «readme.txt«, etc…

Y al final de la guía realizaremos todo el proceso para publicarlo en el repositorio de http://www.wordpress.org.

¿Te animas?

Espero que te animes a seguir esta guía y otras que tengo en lista de espera.

Quiero Feedback

Pues eso, quiero que me comentéis cómo lo veis, que os gustaría que explicara mejor. Si voy muy lento, etc…

Bueno, por hoy lo dejamos aquí y ya seguiremos otro día.

Saludos y mucho ánimo!

Ver la parte 2

He modificado el functions.php y la web no funciona bien

Wordpress Tips - He modificado el functions.php y la web no funciona bien

¿Has modificado el functions.php?

¿Que has modificado el functions.php y ahora la web no funciona correctamente?

Pues si, son cosas que pasan porque la vida es así y porque no depende de un sólo factor.

Puede ser que tengamos algún plugin que choque con alguna función, el tema que estamos utilizando… vete tu a saber..

Pues bien, he aquí algunos consejos para tener en cuenta antes de hacer modificaciones y al final indicaré una posible solución al problema para salir del paso lo antes posible y que nuestra web no esté caída durante mucho tiempo.

Hacer siempre copias de seguridad

Es algo que no hace falta decir, pero que a veces lo vamos dejando y no implementamos un buen sistema de copias de seguridad. Además, hoy por hoy hay un montón de plugins gratuitos y de pago que nos permiten programar copias de seguridad de nuestros WordPress semanalmente, diariamente, etc..

Yo suelo usar UpdraftPlus.

oscarabadfolgueira.com UpdraftPlus

Es cuestión de gustos porque hay muchísimos simplemente en el repositorio de http://www.wordpress.org. Buscando por Backup, encontramos todos estos.

oscarabadfolgueira.com resultados busqueda backup en wordpress.org

Como decía, con este plugin y con muchos otros, podemos automatizar nuestras copias de seguridad pero es que además, cuando vayamos a hacer algún cambio en un momento dado, no nos cuesta nada darle al botón para hacer la copia de seguridad «AHORA«. De esta forma tendremos una copia de seguridad de justo antes de hacer el cambio y no perderemos nada de lo que hemos modificado hace un momento.

Bueno, lo de hacer copias de seguridad queda claro, ¿no?

Siguiente….

Cuidado con usar el editor

Supongo que ya conoceréis el editor de WordPress.

oscarabadfolgueira.com editor de WordPress

Me refiero a la posibilidad que nos da WordPress de modificar un fichero de un tema o de un plugin directamente la administración del mismo si tener que descargar el fichero, modificarlo y posteriormente volverlo a subir.

Esto esta bien, claro que si pero tiene sus  pegas!

Que pasa si realizamos una modificación en un fichero, pongamos el functions.php por poner y no nos damos cuenta y algo del código que acabamos de escribir tiene algún fallo, le falta algo o le sobra algo.

Daos cuenta que cualquier cosilla puede hacer que nuestra web no funcione correctamente tras un cambio de estos.

Claro que también nos puede pasar lo mismo si descargamos el fichero y luego lo subimos, pero tenemos una copia de seguridad del fichero original, verdad? Pues eso, mejor así. Es mejor pecar de precavido…

Por consiguiente, vamos a procurar hacer los cambios en local, en nuestro ordenador y para ello nos descargamos el fichero o ficheros en cuestión a través de ftp, hacemos una copia, el original lo podemos renombrar para que sepamos que ese es el original, modificamos la otra versión y ésta es la que volvemos a subir a nuestro servidor de hosting.

Entonces… ¿Si la web no funciona bien después de un cambio?

Pues eso, lo que acabo de comentar. Si hacemos algún cambio en un fichero de nuestro WordPress y después no funciona correctamente, subimos la versión original que nos hemos descargado o en su defecto, si no hemos hecho copia de este fichero, volvemos a modificar el fichero eliminando los últimos cambios que hayamos realizado para dejarlo tal y como estaba antes de hacer los cambios.

Si tenéis alguna duda sobre esto, me la podéis hacer llegar a través del formulario de contacto e intentaré resolverlas.

Resumiendo

Para resumir, aunque tengo pensado hacer otros posts para extender esta temática:

1-. Hacer copias de seguridad regularmente.

2-. Hacer copia de seguridad antes de realizar el cambio.

3-. No utilizar el editor de WordPress en un sitio en producción.

4-. Descargar el o los ficheros que tenemos que modificar, hacer una copia y modificar la copia. Después subir el fichero modificado.

5-. Si todo ha ido bien, perfecto! Si no ha ido todo bien, subimos a nuestro servidor el fichero original.

Y de esta forma nos aseguramos de que, aunque algo salga mal, volveremos a tener nuestra web online y sin problemas lo antes posible.

Hasta la próxima…

Com siempre os recuerdo que cualquier duda sobre este o cualquier otro tema relacionado con WordPress que tengáis, me la podéis hacer llegar a través del formulario de contacto.

Además, también podéis sugerirme alguna cosilla de la que queréis que hablemos aquí.

Seguimos!!

WordPress Snippet: Redirigir a nuevos usuarios registrados a una página específica

Wordpress Snippet - Redirigir nuevos usuarios registrados a una página específica Raw

Este snippet o trocito de código nos puede servir en aquellos casos en los que queramos redirigir a los nuevos usuarios registrados a una página específica. Generalmente será de nuestra web pero podría ser una página externa.

Podríamos utilizarlo para llevar a los nuevos usuarios a una página en la que expliquemos ciertas ventajas o servicios de nuestra empresa o a algún que otro regalito para los nuevos.

Como este Snippet es muy sencillo, dejo el código a continuación:


Como siempre, este código lo podemos incluir en el fichero functions.php de nuestro tema o crear nuestro propio plugin.

También como siempre os invito a que me hagáis llegar vuestras dudas sobre este y cualquier otro tutorial o artículo que haya publicado e incluso a proponerme algún otro artículo que os pueda ser de interés.

Saludos y seguimos!

WordPress Snippet: Establecer el número de revisiones en WordPress

WordPress Snippets - Establecer el numero de revisiones

Esto va a ser rápido.

No es un Snippet propiamente dicho pero bueno…

Ya sabréis que WordPress guardar revisiones de los posts que publicamos cada vez que hacemos una modificación y guardamos de nuevo el post.

A continuación, una imagen de la sección de revisiones:

Establecer el numero de resiviones de las entradas en WordPress

Esta sección está disponible dentro de cada post o página pero si no conseguís verlo tal vez sea porque no habéis activado el check correspondiente en las opciones de pantalla que está en el parte superior:

Establecer el numero de resiviones de las entradas en WordPress - 02
Establecer el numero de resiviones de las entradas en WordPress - 03

Ahora lo tenemos claro y si alguna vez lo hemos mirado, tal vez hayamos visto varias revisiones dependiendo de post y de lo que hayamos trabajado con el.

Pues bien, si queremos establecer un número máximo de revisiones para que no tengamos un ciento o más, podemos hacerlo modificando el fichero «wp-config.php» de nuestra instalación de WordPress.

Bien, para establecer el número de revisiones a «3» pondremos lo siguiente:

define('WP_POST_REVISIONS', 3);

Modificad el «3» por el número de revisiones que queráis y listo.

Ah!!

Debemos incluirlo por encima de «ABSPATH» porque de lo contrario no funcionará.

Espero que os sea de utilidad.

En otro tutorial veremos cómo desactivar por completo las revisiones.

Cualquier duda que tengáis sobre esto o cualquier otra cosa relacionada con la temática de este blog, me la podéis hacer llegar a través del formulario de contacto o escribir un comentario.

Venga, hasta la próxima!

WordPress Snippet: Establecer un mínimo de caracteres al comentar

WordPress Snippets - Establecer un mínimo de caracteres al comentar

En ocaciones vemos comentarios por la web que simplemente dicen «Ok«, «Buen trabajo«, «Buen tutorial«, etc..

Es posible que con esto nos baste pero también es posible que no nos interesen eso comentarios tan cortos y que necesitemos establecer algún mecanismo para establecer un mínimo de caracteres en los comentarios y así forzar al usuario que comenta a explayarse un poco más.

Pues bien, para trabajar con lo comentario disponemos del hook: «preprocess_comment» que más o menos nos hacemos una idea de en qué momento se ejecuta.

Lo que haremos será modificar el tamaño mínimo establecido para comentarios utilizando el hook que acabamos de comentar.

add_filter( 'preprocess_comment', 'set_minimal_length_for_comments' );

Llamaremos a la función que se ejecutará en el filter hook «preprocess_comment» como: «set_minimal_length_for_comments«.

Pues bien, nos ponemos manos a la obra creando la función de momento:

function set_minimal_length_for_comments( $comment ) {
    return $comment;
}

Esta parte de momento la entendemos bien. La función recibe el comentario en una variable y al final de la función la devuelve, eso si, después de hacer unos procesos que le indicaremos.

    $min_length = 15;
    if ( strlen( trim( 'comment_content'] ) ) < $min_length ){
        wp_die( 'Los comentarios deben ser por lo menos de ' . $min_length . ' caracteres.' );
    }

Establecemos 15 como número mínimo de caracteres que deben tener los comentarios y posteriormente comprobamos si la longitud (en caracteres) del comentario es menor que 15. Si es así, muestra un aviso al usuario que está realizando el comentario.

Por lo tanto, ahora cuando alguien intente publicar un comentario corto como este:

wp-snippet-establecer-minimo-caracteres-comentario-01

No le dejará publicar el comentario y le mostrará un mensaje de aviso como el siguiente:

wp-snippet-establecer-minimo-caracteres-comentario-02

A continuación pongo el código completo de este Snippet:

Lo podéis utilizar simplemente incluyendo el código en el fichero «functions.php» de vuestro Tema o si lo queréis, podéis crear vuestro propio plugin.

Cualquier duda u observación me la podéis hacer llegar a través del formulario de contacto, a través de un comentario o en las redes sociales.

Espero que os sea de ayuda.

Saludos y hasta el próximo!

WordPress Snippets: Modificar el número de posts por página

WordPress Snippets: Modificar el número de posts por página

Con esta entrada o post comienzo una serie de artículos sobre diferentes snippets de código para WordPress, que no son más que «trocitos» de código que realizan o pretenden realizar tareas concretas.

En este caso voy a explicar el código para modificiar el número de posts por página que establece WordPress o que tal vez nuestro thema también lo haya modificado. En esos casos en los que queramos modificar el número de posts por página en algunas de las páginas de nuestro blog, podemos utilizar el código que pondré a continuación.

Pero antes de nada comentar que procuraré hacer dos partes o más bien hacerlo de dos formas, o tres si me apuras.

En primer lugar vamos a ver cómo hacerlo con programación estructurada y en otro artículo lo haremos con programación orientada a objetos.

Para incluir este código u otros en vuestro blog de WordPress, lo podéis hacer en el fichero «functions.php» de vuestro tema. No hay problema. Lo podeís poner al final del fichero y listo. Eso si, tened cuidado puesto que si lo hacéis en el editor de WordPress y algo falla, tendréis que modificar el fichero «functions.php» descargándolo por ftp y luego volver a subirlo.

Es muy común olvidar algún «;» o algún cierre «}«. Sin más, tenedlo en cuenta.

También podéis crear vuestro propio plugin y dependiendo de algunas cosas, tal vez en otro artículo lo haga en un plugin y así vemos mejor cómo se hace un plugin y vamos practicando.

Comenzamos creando la función que ejecutará el hook:

function number_of_posts_per_page( $number ) {
       ........
}

Como podemos ver en la función, recibe una variable. Esta variable contendrá el número de posts por página que le indiquemos.

Y ahora el action que ejecutará la función y que es el alma de la programación en WordPress:

add_action('pre_get_posts', 'number_of_posts_per_page');

Lo que hace es ejecutar la función que vamos a crear en el action «pre_get_posts» que como su propio nombre indica tiene lugar antes de cojer los posts para luego mostrarlos. De esta manera, le pasamos el númeor de posts a este hook y el lo hará todo por nosotros.

imagen_pixabay_oscarabadfolgueira_wordpress_snippets_modificar_numero_posts_por_pagina

Ahora bien… Podemos establecer el número de posts por página en diferentes páginas. Como por ejemplo en la página de inicio, en la de búsqueda, en la de etiquetas, etc..

En primer lugar haremos una prueba sólo con la página de inicio.

Supongamos que queremos que en la página de inicio de nuestro blog se muestren los artículos de 15 en 15. Para ello, dentro de la función que hemos comentado antes, especificamos lo siguiente:

if ( is_home() ) {
    $number->set( 'posts_per_page', 15 );
}

¿Fácil verdad?

Por si acaso comento la jugada: Si «is_home«, osea que si es la página de inicio o inicial de nuestro blog que haga algo:

$number->set( 'posts_per_page', 15 );

Establecer en 15 el número de «posts_per_page» y guardarlo en la variable $number.

Creo que no hay mucho más que decir sobre esto porque se ve muy claro.

Bien, pues ya que estamos, vamos ha tener en cuenta otras páginas para establecer también el número de posts por página. Como por ejemplo las siguientes:

  • Página de etiquetas.
  • Página de autor.
  • Página de búsqueda.
  • Página de categoría.
  • Página de archivo.

Al igual que con la página de inicio, cada una de las anteriores dispone de un «is_xxx» para saber si se trata de la página en cuestión.

A continuación indico las páginas junto con sus funciones:

Página de inicio.      ---> is_home()
Página de etiquetas.    --> is_tag()
Página de autor.       ---> is_author()
Página de búsqueda.     --> is_search()
Página de categoría.   ---> is_category()
Página de archivo.     ---> is_archive()

Pues ya tenemos toda la información que necesitamos para completar nuestro snippet WordPress.

Aquí teneís el código completo:

Como he indicado antes, lo podéis incluir en el fichero «functions.php» del theme o hacer un plugin.

Espero que os sea de utilidad.

En posteriores artículos veremos más cosas sobre esto y otras muchas cosas de WordPress.

Saludos.

Guía de la Shortcode API de WordPress: 3 – Shortcodes incluídos en WordPress – [audio]

Comenzamos con el tercer artículo sobre la Shortcode API de WordPress.

En los dos anteriores artículos vimos lo que son los Shotcodes y sus tipos además de las diferentes formas o sitios donde podemos incluir su código.

Pues mira, acabo de darme cuenta de que me vendría bien un plugin para estos temas. Me refiero a un plugin para gestionar «series de artículos». He visto que existen varios en el repositorio de WordPress pero como ya he comentado anteriormente, es muy buena práctica hacer nuestros propios plugins cuando nos hagan falta. Aquí queda esto. Un día de estos miraré la posibilidad de hacer un plugin para gestionar series de artículos pero por el momento dejo los enlaces de los dos anteriores a continuación:

Guía de la Shortcode API de WordPress

Introducción.

Opciones para crear Shortcodes.

Y ahora vamos a lo que vamos…

WordPress pone a nuestra disposición varios shortcodes que ya están listos para poder utilizarlos sin necesidad de tener que programarlos.

Son bastante útiles dependiendo de las necesidades de cada uno.

A continuación indico la lista de estos shortcodes:

  1. Esto no puede quedar así por lo que hay que realizar una pequeña configuración. Es decir, necesitamos decirle qué fichero queremos que se reproduzca con este reproductor que acabamos de embeber.

    Lo que hacemos es posicionarnos y hacer click sobre el reproductor. Al hacer click se motrarán dos botones como los de la siguiente captura:

    guia-shortcode-api-parte-3_01-audio

    El segundo botón, el de la «X» no hace falta que lo comente pero pulsamos en el otro, el dela imagen de un lapicero. En la primera pantalla que se muestra, podemos seleccionar o configurar la reproducción para este reproductor:

    guia-shortcode-api-parte-3_01-audio02

    Como vemos en la igamen, podemos seleccionar si queremos reproducir los ficheros «mp3», «ogg» o los dos. También tenemos opciones para la precarga además de repetición y reproducción automática ya que por defecto es así como está configurado.

    También por defecto asume que queremos reproducir todos los ficheros de audio como vemos en el siguiente imagen que se muestra al pulsar sobre «Reemplazar audio»:

    guia-shortcode-api-parte-3_01-audio03

    Ya vemos que tenemos 2 ficheros disponibles. Son los únicos que tengo yo actualmente en mi librería multimedia de WordPress. A partr de aquí podemos elegir cualquiera de ellos o los dos. También podemos realizar filtrados para encontrar los que queremos si es que tenemos muchos.

    guia-shortcode-api-parte-3_01-audio04

    Yo he seleccionado uno sólo y pulsado sobre el botón «Reemplazar». A continuación se muestra la siguiente pantalla por si queremos modificar algo:

    guia-shortcode-api-parte-3_01-audio05

    Y listo, pulsamos en «Actualizar» y ya lo tenemos listo para que lo ejecuten y eschuchen los visitantes de nuestra web o blog.

    Ojo!! También podemos poner simplemente el enlace a un fichero «mp3» y WordPress lo convierte automáticamente a reproductor de ese fichero:

    https://oscarabadfolgueira.com/wp-content/uploads/2016/01/08-usos-de-wordpress-introduccion.mp3
    

    Esto que acabmos de escribir nos mostrará lo siguiente:

    Interesante, ¿verdad?

    Bien, como suele ser costumbre, este shotcode admite opciones para que podamos realizar ciertas configuraciones directamente en el shortcode.:

    src  –> Nos permite indicar la url del fichero que queremos reproducir. Podemos indicar fichero con las siguientes extensiones: ‘mp3‘ , ‘m4a‘, ‘ogg, ‘wav‘ o ‘wma‘.

    loop –> En este caso nos permite habilitar o deshabilitar la reproducción continua. Por defecto está deshabilitada. La opciones que tenemos son: «off» y «on«.

    autoplay –> Nos permite configurar el reproductor para que comience la reproducción una vez que esté listo el reproductor y el fichero de audio. Las opciones, al igual que con «loop» son: «off» y «on«. Por defecto está deshabilitado.

    preload –>  Podemos especificar si el audio debe cargarse cuando se carga la página y cómo. Disponemos de las siguientes opciones:

    «none» -> (por defecto) El audio no se cargará cuando se cargue la página.

    «auto» -> El audio se cargará por completo cuando se cargue la página.

    «mediadata» –> Sólo se cargará la información de mediadata cuando se cargue la página.

    A continuación pongo un ejemplo un poco más completo para que os hagáis una idea más clara de cómo funciona:

    Y ahora

    Bien!

    Como ya hemos visto, dispone de varias opciones de configuración y son bastante sencillas por lo que no voy a ahondar más en ello.

    En los siguientes artículos de esta serie, veremos más shortcodes que WordPress pone a nuestra disposición antes de ponernos manos a la obra para realizar nuestros propios shortcodes.

    Nos vemos!

Escapar Shortcodes en WordPress

Es posible que en algún momento hayas querido escribir algún que otro artículo sobre los shortcodes de WordPress y claro, necesitas de vez en cuando mostrar el texto del shortcode y que no se ejecute el shortcode para mostrar lo que tiene programado.

Para que nos entendamos… Si yo quiero mostrar [shortcode] en lugar de:

Por mi experiencia con WordPress, este es un problemilla al que nos enfrentamos cuando escribimos artículos sobre shortcodes en nuestros blogs WordPess.

Pues bien, disponemos de dos opciones aunque a mi personalmente sólo me funciona bien una de ellas.

Podemos escapar los shortcodes así:

[audio]

 Como ya comento, parece ser que las dos formas funcionan pero yo he realizado varias pruebas y me quedo con la primera opción que parece que me está funcionando mucho mejor.

No estaría de más que alguno comentaras las pruebas que ha realizado con esto para mostrarnos un poco de luz a todos y a todas.

Saludos y hasta la próxima.

Guía de la Shortcode API de WordPress: 1 Introducción

En esta ocasión vamos a ver de cabo a rabo la Shortcode API de WordPress que, como veremos, es una herramienta imprescindible cuando estamos programando en WordPress.

¿Qué es la Shortcode API?

Bien, como menciona la documentación oficial de WordPress.org, la Shortcode API es un conjunto de sencillas funciones que nos permiten crear nuestros propios Shortcodes para incluirlos en algunas ubicaciones de nuestro WordPress y de esta manera facilitarnos la vida con ciertas tareas que sin disponer de el Shortcode en cuestión, nos llevaría mucho más tiempo y nos provocaría mas de un quebradero de cabeza.

A lo largo de los artículos dedicados a la Shortcode API iremos viendo y avanzando sobre este tema.

¿Qué es un Shortcode?

Claro, he comentado qué es la Shortcode API pero no he comentado qué es un Shortcode.

Pues bien, un Shortcode lo podríamos definir como un «código» a través del cual llamamos a una función que tenemos previamente implementada y la cual realizará una o varias operaciones aunque también podemos utilizarla para hacer sustituciones. Esta última utilidad es la más utilizada en estos momento o por lo menos eso creo yo.

Un ejemplo para entenderlo mejor

El típico ejemplo de lo más sencillo es crear un Shortcode para sustituir en el lugar en el que ponemos el Shortcode por otro contenido.

Por ejemplo, imaginad que tenemos costumbre de poner el texto «Google» muchas veces en casi todos los artículos o entradas que creamos, y creamos muchas. Es un ejemplo, ok?

Pero no sólo eso. Imaginad que sobre el texto Google siempre ponéis el enlace a la web de Google España. Entonces, cada vez que ponéis el texto Google tenéis que seleccionarlo, pulsar sobre el botón de «Insetar / editar enlace» del editor de texto de WordPress y poner el texto que hará de enlace «http://www.google.es» y ya que estamos, hacer check para que se abra en otra pestaña del navegador.

Vale, si lo tenemos que hacer 5 veces en un mes pues casi que no nos importa pero si tenemos que hacerlo 10 veces todos los días… Esto ya es ago tedioso y hay que intentar siempre que sea posible automatizar las tareas para ahorrar tiempo.

Para el caso que estamos comentando, podemos crear un Shortcode para que cada vez que escribamos ese código en el editor de entradas de WordPress, o sustituya por lo que finalmente queremos, que no es otra cosa que el texto Google que contenta un enlace a «http://www.google.es».

Entonces, nosotros sólo tendríamos que escribir el código [google] en nuestra entrada y el lo sustituiría por Google.

Interesante y útil, ¿verdad?

Hemos visto un ejemplo muy sencillo pero ya veremos que podemos hacer verdaderas virguerías con los Shortcodes. Ya veréis…

Tipos de Shortcodes

Como ya habréis adivinado o intuido y si no lo habéis hecho, os lo digo yo: Hay varios tipos de Shortcodes. Cada uno de estos tipos tiene sus propias características y añaden funcionalidades y características que nos vienen muy bien para realizar tareas avanzadas.

Hay tres tipos de Shortcodes ( o cuatro, según se mire):

Sencillo y sin parámetros ni contenido.

Este tipo es el que hemos comentado hace un momento:  

[codigo]

Y como también hemos comentado, este tipo de Shortcode lo escribimos tal cual y WordPress se encarga de sustituirlo por lo que hayamos programado en la función correspondiente.

Con parámetros.

Estos del estilo: [codigo parametro=»valor»]

En este caso se utiliza el parámetro que se pasará a la función del Shortcode y realizará algo teniendo en cuenta el parámetro en cuestión.

Como ejemplo podemos seguir con el anterior y darle una vuelta para que cuando pongamos [enlace url=»google»] nos lo intercambie por Google. Parece igual que el anterior, ¿verdad? Pues no, porque este nos permitiría tomar el parámetro y en la función hacer una cosa u otra o más bien mostrar una cosa u otra en función de ese parámetro.

Por ejemplo, si en lugar de «google» le indicamos «facebook» o «bing», que haga lo correspondiente dependiendo del valor del parámetro que le indiquemos. Por consiguiente habrá que implementar estas opciones en la función del Shortcode.

Para entenderlo mejor, a continuación indico tres posibles opciones de este Shortcode :

[codigo url=»google»]   –>    Google

[codigo url=»facebook»]  –>  Facebook

[codigo url=»bing»]  –>  Bing

Como vemos en los ejemplos anteriores, dependidiendo del parámetro que indiquemos, mostrará una cosa u otra.

En este ejemplo hemos usado un parámetro pero es posible utilizar más de uno.

Haré algún ejemplo en otro artículo de esta serie para que veamos cómo se hace, cómo crear el código necesario para implementarlo.

Con contenido.

Este tipo de Shortcode se implementa de la siguiente forma:

[codigo]Contenido dentro del shortcode[/codigo]

Observamos que es como el primer tipo que hemos comentado antes pero extendemos su funcionalidad introduciendo contenido entre

[codigo] y [/codigo]

.

De forma similar al tipo de Shortcode anterior, en este caso también podremos utilizar el contenido que se indique entre la apertura y cierre del Shortcode.

Podríamos pasarlo a la función que  implementemos en el código del Shortcode y hacer algo con este contenido pero también podríamos hacer que, simplemente sea texto y lo formateemos a nuestro gusto. Por ejemplo, que se le aplique: negrita, un tamaño de fuente de 22, cambiarle el tipo de fuente y/o cualquier cosa que se nos ocurra.

Y ahora vamos a comentar el último tipo de Shortcode.

Con parámetros y con contenido.

[codigo parametro=»valor»]contenido[/codigo]

Si hemos prestado atención a los anteriores tipos, nos daremos cuenta que este tipo es una mezcla del segundo y del tercero, ¿verdad?

Utilizará uno o varios parámetros y también contenido.

No me voy a extender más con este tipo porque habla por si mismo y haré algún ejemplo sobre este y los demás en otros artículos de esta serie, más adelante.

Espero que os haya gustado este artículo sobre la Shortcode API de WordPress y que me comentéis lo que queráis, dudas, comentarios, etc…

Si duda, la utilización de los Shortcodes es imprescindible en programación WordPress y debemos aprender a manejarlos con soltura. Me refiero a lo que se refiere a su programación.

En el próximo artículo de esta serie veremos las diferentes opciones que tenemos para crear un Shortcode y alguna que otra cosa más.

Saludos y hasta el próximo artículo.

Programad todo lo que podáis!!

Genesis Framework: Crear un child theme

¿Por qué no?

Genesis Framework es hoy en día uno de los mejores frameworks para WordPress si no es el mejor.

Nos da una serie de herramientas que nos permiten desarrollar e implementar sitios web rápidamente y no hablo solo del aspecto, hablo también de estructuras y de funcionalidades debido al buen número de hooks que pone a nuestra disposición.

¿Qué es y cómo funciona Genesis Framework? Resumen rápido

Como he dicho hace un momento, Genesis Framework pone a nuestra disposición un montón de funcionalidades que nos harán la vida más placentera desarrollando webs, portales, etc.. de una manera muy rápida y funcional.

Al principio puede parecerte algo extraño trabajar con un framework WordPress sin o lo has hecho antes pero te garantizo que en poco tiempo te acostumbrarás y estarás encantado o encantada con el.

No pretendo extenderme en este artículo así que vamos allá.

Para instalarlo funciona como un Tema normal y corriente. Puedes instalar vía FTP o a través de la sección de Temas de tu WordPress. Subes el fichero zip comprimido y listo.

Ahora bien, claro que podrías activarlo y funcionar como un tema normal pero la idea no es esa sino que lo que queremos es que nos sirva de Framework. Podemos instalar algún Tema gratuito o de pago que hay en varios sitios web y en ese caso, activaríamos éste último y dejaríamos a Genesis Framework tranquilo para que haga su trabajo sin molestarle.

Pero hoy vamos a ir un poco más allá porque lo que queremos es crear nuestro propio tema. Bien sea para nosotros, para un cliente, para ofrecerlo gratis o incluso para venderlo.

La forma más sencilla de hacer esto es servirnos del tema «demo» que viene cuando compras Genesis Framework. Este tema es muy sencillo y nos ayudará a desarrollar nuestro tema partiendo de los estilos que ya tiene el tema demo. Estos estilos los cambiaremos más adelante pero para no empezar sin estilos, ya os digo, utilizaremos este tema demo.

Por lo tanto, subimos el tema demo y lo activamos. En este momento ya podemos ver nuestra web similar a esto:

genesis-crear-theme-04

No voy a activar ni configurar nada todavía, lo único que hago es configurar los enlaces permanentes a mi gusto.

¡A crear el tema se ha dicho!

Lo que tenemos que hacer ahora es crear un directorio con el nombre de nuestro nuevo tema y dentro de este directorio crear un fichero php con el mismo nombre que el directorio. Y por último, un fichero «styles.css».

Ah, bueno, también podemos copiar los dos ficheros del tema demo, editarlos y modificar los campos requeridos como el nombre del plugin, etc…

A continuación puedes ver el contenido de los que yo he modificado para que te hagas una mejor idea:

genesis-crear-theme-01

Y si queremos que nuestro tema tenga una imagen (screenshot) en la sección de Temas de WordPress, estaría bien poner una imagen con el nombre «screenshot.png» dentro del mismo directorio de nuestro nuevo plugin. Yo he copiado la del tema demo y le he puesto un garabato para poder distinguirlas a simple vista en el panel de administración.

Ahora que ya tenemos todo listo, subimos nuestro nuevo tema por ftp o lo comprimimos en un zip y lo subimos desde la administración de WordPress.

Ya debería de estar disponible nuestro nuevo tema para activar. Lo activamos y listo!!

genesis-crear-theme-03

Hemos creado un tema hijo (child theme) de Genesis Framework y lo hemos activado.

Si vamos al frontal de la web veremos el aspecto que tiene. Ya, no es gran cosa porque no hemos tocado nada pero es un buen punto de partida, ¿verdad?

En próximos tutoriales iremos haciendo cosas interesantes con nuestro nuevo tema para que, poco a poco, vaya tomando forma, la forma que le queramos dar.

Ah, por último, comentar que en el tema demo hay un fichero «xml» para que puedas importarlo y de esta manera, disponer de contenido de demostración y que no estemos sin contenido mientras creamos nuestro tema.

Espero que te guste lo que te he comentado y que me digas lo que te parece.

Dejo el código de este tema hijo en Github por si quieres echarle un vistazo.

Saludos y hasta la próxima!

Programación de Plugins WordPress: Crear un Meta Box

En otros tutoriales hemos visto cómo crear un menú y submenu en el panel de administración de WordPress. Pues bien, en este caso vamos a ver cómo crear un Meta Box personalizado por nosotros mismos.

Pero antes de nada, ¿Qué es un Meta Box?

No son otra cosa que secciones o campos extra que nos permiten añadir información o datos adicionales a nuestro contenido, páginas, etc… Pero para que nos quede más claro antes de hacer nada, pongo unas capturas para que nos quede claro a todos de lo que estamos hablando:

crear metabox - 01
crear metabox 02

Bien, con estos dos ejemplos creo que nos puede quedar claro de lo que estamos hablando, ¿verdad?

La primera imagen corresponde a un meta box que está creado justo debajo de el cuadro de escritura del cuerpo de las entradas y el segundo está en la barra lateral de la misma pantalla de edición de entradas.

Nos ponemos manos a la obra y como siempre a la hora de crear un plugin:

  • Creamos  un directorio o carpeta con el nombre de nuestro plugin.
  • Dentro de este directorio creamos un fichero con el mismo nombre que la carpeta y con extensión .php.
  • Editamos el fichero en cuestión y lo primero que hacemos es crear la información del plugin como se muestra a continuación:
<?php
/*
Plugin Name: OAF Create Meta Box
Plugin URI: https://oscarabadfolgueira.com/programacion-de-plugins-wordpress-crear-un-meta-box
Description: This plugin creates tow Meta Boxes
Version: 1.0
Author: Oscar Abad Folgueira
Author URI: https://oscarabadfolgueira.com
License: GPLv2
License URL: http://www.gnu.org/licenses/gpl-2.0.html
*/

No me he complicado mucho y le he llamado al plugin donde vamos a crear los meta boxes: «OAF Create Meta Box«.

Esto es pura rutina y ahora vamos a lo que nos importa y lo que nos gusta, código!

En primer lugar y como estamos haciendo en los últimos tutoriales sobre programación de plugins, utilizamos la función add_action() para añadir un action.

En este caso existe una acción (action) para añadir meta boxes. La acción en cuestión es: ‘add_meta_boxes‘. Como siempre los nombres son muy aclaratorios.

Sin más, indico el código para añadir la acción (action):

add_action( 'add_meta_boxes', 'oaf_create_metabox' );

Fácil y sencillo. Pero si lo único que nos hacía falta es saber el nombre de la acción e cuestión ¿no?

Entonces estamos en el momento en el que tenemos que crear la función que se ejecutará en la acción «add_meta_boxes«. vamos a ello:

function oaf_create_metabox () {
}

Ya, era un broma. Esto no nos dice nada. Ahora si, vamos a utilizar la función que nos permite crear un meta box. La función en cuestión es: «add_meta_box()«. No confundir con la acción, ¿vale?

En cuanto a la sintaxis de la función «add_meta_box()«, la vemos a continuación:

add_meta_box( $id, $title, $callback, $screen, $context, $priority, $callback_args );

Ahora comentamos un poco los parámetros:

  • $id: Se refiere al atributo ‘id‘ HTML. Para poder inyectar estilos.
  • $title: El título de la pantalla de edición.
  • $callback: Función que se ejecutará.
  • $screen: El tipo de pantalla en la que se mostrará el meta box. Los valores para este argumento pueden ser: ‘post‘, ‘page‘, ‘dashboard‘, ‘link‘, ‘attachment‘ o ‘custom_post_type‘.
  • $context: La parte de la página dónde se mostrará. Valores posibles: ‘normal‘, ‘advanced‘ o ‘side‘. El valor por defecto es «advanced«.
  • $priority: Prioridad dentro del contexto en el que se mostrará. Los valores para este argumento pueden ser: ‘high‘, ‘core‘, ‘default‘, ‘low‘. El valor por defecto es, como no: «default«.
  • $callback_args: Argumentos a pasar a la función $callback.

Comentar que los tres primeros parámetros son obligatorios y el resto son opcionales.

Y ahora que ya sabemos las opciones que tenemos, vamos a crear un meta box con esta magnífica función:

function oaf_create_metabox () {
	// Function to create the meta box: oaf-metabox1 -- en posts, normal y high.
	add_meta_box( 'oaf-metabox1', 'Mi primer Meta Box', 'oaf_create_metabox_function', 'post', 'normal', 'high' );
}

Resumimos:

  • oaf-metabox1: Es el id del nuevo meta box que estamos creando.
  • Mi primer Meta Box: El nombre del meta box. Esto lo veremos…
  • oaf_create_metabox_function: La función que «pintará» el contenido del meta box. La crearé a continuación.
  • post: la página donde se mostrará el meta box.
  • normal: Se mostrará en la columna debajo del editor del texto del post. Luego lo vemos.
  • high: Prioridad alta lo que hará que aparezca bien arriba.

Y para muestra un botón:

crear metabox 03

Se ve bien dónde está el meta box, ¿no?

Pues venga, vamos a crear otro, esta vez en las páginas y en la barra lateral derecha:

//Function to create the meta box: oaf-metabox2  -- en páginas, side, core
	add_meta_box( 'oaf-metabox2', 'Mi segundo Meta Box', 'oaf_create_metabox_function', 'page', 'side', 'core' );

Lo que hace este es esto:

crear metabox 04

¡Perfecto!

Ah! Pero se me había olvidado comentar que tenemos que crear la función a la que llama. Esta es muy fácil:

function oaf_create_metabox_function(){
	echo 'Mi nuevo Meta Box';
}

No creo que haga falta decir lo que hace esta función…

Ya veis lo fácil que es crear meta boxes. Eso si, todavía no hemos hecho nada con ellos. Eso lo dejamos para otro tutorial porque las cosas se aprenden mejor poquito a poco y así también podemos hacer alguna que otra prueba o test para afianzar los nuevos conocimientos que vamos adquiriendo.

Para terminar pongo el código fuente completo de el fichero «oaf-create-metabox.php«:

<?php
/*
Plugin Name: OAF Create Meta Box
Plugin URI: https://oscarabadfolgueira.com/programacion-de-plugins-wordpress-crear-un-meta-box
Description: This plugin creates tow Meta Boxes
Version: 1.0
Author: Oscar Abad Folgueira
Author URI: https://oscarabadfolgueira.com
License: GPLv2
License URL: http://www.gnu.org/licenses/gpl-2.0.html
*/
// Action hook add_meta_boxes
add_action( 'add_meta_boxes', 'oaf_create_metabox' );

function oaf_create_metabox () {
	// Function to create the meta box: oaf-metabox1 -- en posts, normal y high.
	add_meta_box( 'oaf-metabox1', 'Mi primer Meta Box', 'oaf_create_metabox_function', 'post', 'normal', 'high' );
	//Function to create the meta box: oaf-metabox2  -- en páginas, side, core
	add_meta_box( 'oaf-metabox2', 'Mi segundo Meta Box', 'oaf_create_metabox_function', 'page', 'side', 'core' );
}
// Function that prints out the HTML for the edit screen section.
function oaf_create_metabox_function(){
	echo 'Mi nuevo Meta Box';
}
?>

Como siempre, os dejo el código fuente de este plugin en Github por si queréis descargarlo.

Saludos y nos vemos en el próximo tutorial.

Ir al contenido