Guardar y cargar datos en la tabla opciones de WordPress

Si usas WordPress como desarrollador sabrás que hay varias formas de almacenar datos sobre su base de datos sin necesidad de crear nuevas tablas. Hoy os voy a explicar una de ellas. Aparte de esta que voy a explicaros, existen básicamente dos más:

  • Para guardar tipos de datos (menos usuarios) y sus metadatos (o atributos)
  • Para guardar datos de usuarios y sus metadatos

Estructura

Esta en concreto usa la tabla opciones, wp_options o prefijo_options y para entender cómo usar las funciones y el objetivo de la misma, lo mejor es ver su forma. Esta tabla tiene la siguiente estructura:

  • option_id: su clave primaria
  • option_name: nombre de la opción
  • option_value: valor de la opción
  • option_autoload: indica si debe cargarse o no de primeras

Como veis, tenemos la estructura típica de las tablas hash: clave / valor con: option_name / option_value tan de moda ahora en bases de datos no relacionales y tan útiles. read more

Leer más » 1 Comentario

Obtener nombre, dirección y otros detalles de un blog dentro una red de blogs WordPress

Las redes de blogs WordPress, los antiguos WordPress Multisite, son una alternativa muy funcional para poder mantener multitud de sitios, en una sola instalación. No tienen por qué ser blogs, ni formar parte de una red como tal, sino pertenecer a una misma instalación para ahorrar en recursos y en mantenimiento. read more

Leer más » 2 Comentarios

Comprobar en PHP si una URL contiene una cadena

phpMuchas veces tenemos que tomar decisiones en función de lo que contenga la URL. No suele ser el método más elegante y en una buena arquitectura con un modelo vista controlador no es lo frecuente, sin embargo, sí es algo que pasa y es algo que nos puede sacar de más de un problema si sabemos cómo hacerlo. read more

Leer más » 3 Comentarios

Obtener una lista HTML de todas las categorías en WordPress

Como todos sabréis si usáis WordPress, toda la información que el sistema maneja: las entradas, las páginas, o cualquier otro tipo de dato que hayáis creado (los llamados Custom Post Type), se estructura en base una taxonomía. read more

Leer más » 1 Comentario

Calcular día de la semana con PHP

Los requisitos de los clientes, en buena medida suelen tener que ver con restricciones temporales. No sólo de cantidad de tiempo, sino también de qué días o no es. Por eso hoy os traigo este código. Veremos primero cómo averiguar qué día de la semana es para una fecha dada, para posteriormente hacer una función de ejemplo que diga si es fin de semana o no. read more

Leer más » 2 Comentarios

Comprobar si un usuario es administrador en WordPress

Cuando trabajamos con WordPress, uno de los puntos básicos es definir diferentes vistas en función del rol del usuario. En la mayor parte de las ocasiones, la diferencia será: es administrador, no lo es.

¿Para qué puede servirnos esto? Desde poner un enlace a editar entrada a otro de eliminar comentarios en tu tema, pasando por todo lo que podáis imaginar que queráis dividir entre visitantes de vuestro sitio y vosotros que sois los administradores.

El código:

if(current_user_can('manage_options'))
{
  // solo administrador
}
else
{
  // resto
}

Leer más » 1 Comentario

Seguridad en formularios WordPress: usando nonce

Cuando usamos WordPress como un CMS o incluso como una API y desarrollamos para él, no serán pocas las veces que tengamos que hacer operaciones de inserción y edición de datos mediante formularios.

Tener un formulario en una aplicación web, es un punto de entrada a nuestro sistema y un sitio complicado en lo que a seguridad se refiere. Si no cuidamos este aspecto también en WordPress, lo que es un CMS seguro, puede convertirse en un problema.

Para resolver este tema, la API de WordPress nos proporciona un mecanismo muy sencillo llamado nonce, que viene del inglés: número usado sólo una vez,  number used once.

Se usan en todo tipo de peticiones: salvando opciones en el administrador, haciendo peticiones AJAX o llevando a cabo cualquier acción susceptible de un problema de seguridad intercambiando información.

Leer más » 1 Comentario

¿Por qué no debemos usar require_once en PHP? ¿Qué soluciones tengo?

Cuando desarrollamos es muy frecuente que necesitemos leer código de otros ficheros, los lenguajes y las tecnología difieren en la forma, pero es algo básico y común a todos ellos (salvo excepciones). En PHP una forma cómoda de hacerlo es con require_once o include_once.

¿Por qué cómoda? Porque incluimos ficheros sin preocuparnos de si ya han sido incluidos. PHP lo hace por nosotros.

¿Qué problema hay? PHP al buscar si han sido incluidos o no, consume una cantidad de recursos y de tiempo de ejecución que siempre que podamos, debemos ahorrárnoslo.

¿Qué soluciones hay frente a este problema? Voy a detallar algunas de ellas, pero seguro que tú conoces alguna más que te funciona.

Usar un framework o un CMS

Si usas un entorno de este tipo, probablemente él te dote de funciones similares en funcionalidad que esquivan este problema. Por ejemplo en WordPress uso mucho get_template_part.

Indicar mediante define si se ha incluido o no

La idea sería algo así:

if (!defined('MiFichero')) {
    require('MiFichero');
    define('MiFicherp', 1);
}

De esta forma, con esta bandera, ya tenemos siempre presentes si está incluido o no (podemos hacer una función con ese código para reutilizarlo).

Leer más » 6 Comentarios

Cambiar nombre de usuario a un super administrador en WordPress Network o WordPress MU

Cambiar el nombre de usuario al administrador en WordPress es una gran idea para mejorar nuestra seguridad, si además instalamos un plugin como Limit Login Attempts mucho mejor.

En una red de blogs, el usuario super administrador, es aún más importante preservarlo de posibles problemas de seguridad. Os pongo en situación, tenemos una instalación vieja de red de WordPress y el usuario es “admin”, quiero que sea otro nombre por seguridad, ¿cómo hago el cambio?

El cambio debemos hacerlo directamente con la base de datos y tiene dos partes.

Actualizar users

Primero en la tabla usuarios, que en una red de blogs WordPress es la misma para todos los sitios y será wp_users o tuprefijo_users:

UPDATE wp_users SET user_login='nuevo-nombre' WHERE user_login='admin';

Actualizar sitemeta

Pero esto no es suficiente, si hacéis sólo esto os quedaréis con un usuario con nombre nuevo pero que NO es super administrador de la red. Ahora nos dirigimos a sitemeta y hacemos un SELECT para ver el valor asociado a site_admins:

Leer más » 1 Comentario

Cómo censurar palabras en PHP

En función de nuestro propósito es posible que en algún caso necesitemos controlar las palabras que se escriben. Es muy común el caso de los foros, incluso supongo que para los gestores de contenido orientados a foros proveen alguna extensión para realizar esta tarea.

Bien, lo que vamos a hacer simplemente es reformatear una cadena de texto que puede contener palabras obscenas o malsonantes por otras de menos vulgares con el lenguaje PHP. Con el siguiente ejemplo lo entenderéis perfectamente:

<?php
function censurar($texto){

   $buscar = array(
   '/puta/i',
   '/joder/i',
   '/gilipollas/i'
   );
   $reemplazar = array(
   'preciosa',
   'recorcholis',
   'bonito'
   );
   return preg_replace($buscar,$reemplazar,$texto);
}

$texto = 'joder! Me cago en tu puta madre gilipollas';
echo censurar($texto);
?>

Obteniendo como resultado: 

Leer más » 3 Comentarios