Integrar un plugin dentro de un tema en WordPress

Aunque el título parezca algo extraño, así es. Si tenemos un plugin que realiza una serie de funciones que queremos distribuir junto con nuestro tema, siempre podremos integrarlo dentro del mismo y así conseguir que al instalar el tema se tengan las funciones del plugin. No os preocupéis por la integración, salvando algún problema derivado de que el plugin lea alguna ruta mal definida (por culpa del autor del plugin) no deberíais tener ningún problema de integración: podréis ver su menú de administración, podréis usar sus shortcode si los tiene, podréis guardar preferencias, etc. no hay problemas en ese sentido gracias a la magia de WordPress su modularidad y lo bien que se adapta al espacio de nombres de PHP. ¿Cómo se hace?

  1. Copia y pega en el raíz de tu tema el directorio del plugin
  2. En el functions.php de tu tema incluye el siguiente código: require_once (get_template_directory() . ‘/miplugin/miplugin.php’ ); siendo “miplugin” el directorio del plugin en cuestión y el fichero que sigue el fichero principal del plugin
  3. Borra del fichero principal del plugin la metainformación que lo define, será un bloque de comentarios que comenzará de la siguiente forma:
Leer más » 1 Comentario

Instalar soporte PHP-GD en un servidor Apache

Siguiendo un poco el hilo de mis últimas entradas dónde se propone eliminar PostgreSQL del arranque o explicamos cómo configurar la interfaz de red por consola, entre otras configuraciones sobre un servidor, vamos a ver cómo instalar soporte PHP-GD en un servidor Apache.

Para ello, abrimos un terminal. Nos logueamos como superusuario, o a través del comando sudo, lanzamos las siguientes instrucciones:

root@6581-Server:~# apt-get install php5-gd

Se instalará junto con las dependencias:

Reading package lists… Done
Building dependency tree
Reading state information… Done
The following extra packages will be installed:
libgd2-xpm
Suggested packages:
libgd-tools
The following packages will be REMOVED:
libgd2-noxpm
The following NEW packages will be installed:
libgd2-xpm php5-gd
0 upgraded, 2 newly installed, […]

Automáticamente debería de haberse reiniciado el servidor para que los cambios surtan efecto, pero si no ha sido así, simplemente invocamos:

root@6581-Server:~# /etc/init.d/apache2 restart

Y finalmente. ¿Cómo comprobar que nuestra instalación de PHP ya soporta PHP-GD?

php5 -i | grep -i –color gd

Leer más » 1 Comentario

[PHP] Convertir segundos en una cadena de tiempo

Me hizo falta hace poco, son de estas cosas que haces una vez y puedes usarla 3 veces a lo largo de tu vida. Los comúnmente conocidos como desarrollos no rentables. En este caso sí lo fue, y como podéis ver por el código no perdí más de 20 minutos en elaborarlo.

Es posible que se os dé el caso y queráis ahorrar vuestro precioso tiempo. Si lo que queréis es simplemente convertir unos segundos en un timestamp en PHP os bastará con crearos en vuestro fichero de funciones:

<?php
function segundosToCadena($segs){
$cadena = ”;
if($segs >= 86400) {
$dias = floor($segs/86400);
$segs = $segs%86400;
$cadena = $dias.’ día’;
if($dias != 1) $cadena .= ‘s’;
if($segs >= 0) $cadena .= ‘, ‘;
}

Leer más » 2 Comentarios

Eliminar PostgreSQL del arranque

Hace unos días instale un servidor con Debian y por comodidad dejé que algunos paquetes se instalaran por defecto. Mejor o no, esa no es la cuestión. Ahora tengo paquetes que son servicios, que están instalados en mi sistema y que quiero evitar que se ejecuten en cada arranque. No quiero eliminarlo, es posible que en un futuro desee usarlos.

Sí, en cada inicio podría detenerlo, incluso podría poner en el cron una tarea que lo hiciera de manera automática, pero eso me parece “una chapuza” pudiéndolo hacer de una manera más limpia. A modo de ejemplo, veremos en esta entrada cómo detener el servicio de PostgreSQL. Si quisiéramos hacer manualmente bastaría con:

root@6581-Server:~# /etc/init.d/postgresql stop

Nos podría servir, pero no es lo que queremos. Para eliminar completamente PostgreSQL del arranque nos serviremos de chkconfig8. Lo primero que vamos a hacer es instalarlo, para ello (y como superusuario):

root@6581-Server:~# apt-get install chkconfig

Para ejecutarlo, es sencillo. El paquete se nombra igual que el programa (también como superusuario):

root@6581-Server:~# chkconfig

Con esto, y sin ningún parámetro, obtenemos la lista de servicios y su estado:

acpid on
apache2 on
atd on
bootlogd on
bootlogs on
bootmisc.sh on
checkfs.sh on

Leer más » 6 Comentarios

El Loop de WordPress: entendiendo la diferencia entre query_posts y WP_Query

Si hay algo importante en un sitio WordPress es el loop. Para programar sitios basados en WordPress debemos tener muy en cuenta los métodos que nos proporciona: query_posts y WP_Query, ¿qué diferencias tiene? ¿Cuándo debemos usar cada una?

Resumiendo

La función query_posts está pensada para modificar el loop de la página principal. La idea de esta función no es crear loops secundarios. Si lo que queremos es crear loop secundarios, deberemos usar objetos WP_Query. Usar query_posts en loop secundarios puede darnos como resultado comportamiento erróneos que muestren cosas que no queremos.

Loop de WordPress

¿Pero qué es el loop principal y qué son los loop secundarios?

Vamos a explicar detalladamente estos dos conceptos, para qué sirven y en qué situaciones hacen falta.

Leer más » 2 Comentarios

Evitar entradas duplicadas en el loop de WordPress

Por motivos que pueden tener que ver con filtros o mala utilización de las consultas personalizadas para loops, es posible que en alguna ocasión suframos un problema: aparece contenido duplicado en nuestro blog o sitio realizado en WordPress.

Para evitar este problema, crearemos un array con los identificadores de las entradas, de forma que sepamos cuáles han sido ya mostradas en el loop actual y así evitar que se muestren dos veces. Tened en cuenta que las entradas están identificadas con su respectivo número entero que es su clave primaria, el identificador.

Veamos directamente el código:

Leer más » 1 Comentario

Codificar dirección de correo electrónico (email) para evitar spam

Cuando colocamos una dirección de correo en un sitio público y que puede ser leído por los spam bot (robots generadores de spam) nos arriesgamos justo a eso, a sufrir las consecuencias de entrar en sus listas y de esta forma coparnos la bandeja de correo no deseado.

Spam

Una solución es dejar de usar enlaces en sitios web del tipo mailto y colocar una imagen con la dirección. El problema de esta solución es que pierde interactividad, no podemos hacer clic directamente.

Una solución es transformar los caracteres en entidades HTML: el bot no lo reconoce tan fácilmente (tiene que estar programado para eso), pero la funcionalidad para nosotros sigue siendo la misma.

Leer más » 1 Comentario

Bloquear una dirección IP con PHP

Sea por comodidad, por manejo o porque no tenemos otra (e.g. no podemos editar la configuración nuestro servidor con htaccess) para bloquear una dirección IP podemos usar PHP con éste propósito.

Para ello, incluiremos dentro de nuestro archivo PHP el siguiente código. Lo ubicaremos en la parte superior, antes de realizar ningún retorno por la salida estándar.

<?
$bloqueo[0]=”167.127.31.5″;
$bloqueo[1]=”167.127.31.5″;
$bloqueo[2]=”167.127.31.5″;
// De esta manera con cuantas como deseemos

if (in_array($_SERVER[‘REMOTE_ADDR’],$bloqueo)) header(“HTTP/1.1 403 Forbidden”);
?>

Leer más » 3 Comentarios

Paginación en WordPress no funciona

En alguna ocasión me he encontrado con algún cliente o un tema en un proyecto propio en el que los botones de paginación no funcionan, incluso usando paginación al estilo WP Page Navi. El problema es que siempre se presenta la primera página sea cuál sea la página que se pida (podemos ver la página que se pide en la URL: /page/2 o /page/3…).

Probablemente no sea un problema de WordPress sino un problema de vuestro tema que no trata las variables de paginación. ¿Cómo podemos verlo? Dirigiros a vuestro index.php o al fichero en el que esté implementado el loop.

  1. Buscad la zona donde se forme la consulta (WP_Query)
  2. Comprobad en sus parámetros si se trata la página, sería algo así: &paged=’ . $paged
  3. En caso de que no se trate la variable, ahí tenéis el problema, si se trata tenéis que comprobar que la variable paged está siendo declarada y correctamente recogida de la URL: $paged = (get_query_var(‘paged’)) ? get_query_var(‘paged’) : 1;

El código a buscar sería el que se encuentra alrededor de WP_Query y debería modificarse para que quedara como se indica a continuación:

Leer más » 2 Comentarios

Configurar la interfaz de red por consola

El propósito de esta entrada es la de administrar la red de nuestro sistema sin necesidad de atender a ninguna interfaz gráfica. Os iré mostrando los puntos que he encontrado más relevantes para configurar la red por consola.

En los ejemplos mencionados estoy logueado como superusuario, de forma que para editar ficheros o realizar determinadas acciones no tenga que solicitar privilegios con otro usuario (e.g. mediante la aplicación sudo)

Mostrar la configuración actual

root@6581-Server:~# ifconfig -a

eth0 Link encap:Ethernet HWaddr 08:00:27:a4:07:e0
inet addr:192.168.1.134 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::a00:27ff:fea4:7e0/64 Scope:Link
[…]

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
[…]

Levantar o bajar una red

No os aconsejo ejecutar la siguiente línea esto si os encontráis conectados de forma remota por esta interfaz.

root@6581-Server:~# ifconfig eth0 down

Modificar la configuración

Existen otras vías, como por ejemplo: ifconfig eth0 192.168.1.134 netmask 255.255.255.0 up, pero prefiero hacerlo así ya que los cambios son permanentes.

Editamos el fichero de configuración

root@6581-Server:~# nano /etc/network/interfaces

Este tendrá la siguiente forma, dónde estamos indicando que la interfaz lo haga un loopback y la eth0 se levante de forma automática, sea estática, tenga esa IP, esa máscara y asignada esa puerta de enlace predeterminada. 

Leer más » 3 Comentarios