WordPress

Compartiendo experiencias sobre la plataforma CMS más importante del mundo

BuddyPress

El increíble y fabuloso plugin de WordPress para crear redes sociales verticales

¿Cómo crear una RED SOCIAL?

Experiencias, ideas y materiales para llevar adelante tu próximo proyecto de creación de una red social

Mostrando entradas con la etiqueta php. Mostrar todas las entradas
Mostrando entradas con la etiqueta php. Mostrar todas las entradas

martes, 10 de septiembre de 2013

El cron de Unix a dejado de funcionar

Como webmaster, es posible que tengas procesos ejecutándose en el CRON. Pero qué sucede si de pronto dejan de funcionar, por ejemplo luego de un reinicio inesperado del sistema??

Mi primera recomendación es que analices en este enlace las causas más comunes: http://askubuntu.com/questions/23009/reasons-why-crontab-does-not-work

Algunas acciones rápidas.

1) Verificar que se esté ejecutando:
pgrep cron

2) Verificar si no expiró la contraseña del usuario correspondiente:

chage -l nombreDeUsuario

3) Verificar la configuración de nuestro crontab

crontab -l -u nombrDeUsuario

4) Eliminar el crontab de un usuario

crontab -r -u nombrDeUsuario

5) Reiniciar el servicio de cron
service crond restart


6) Un caso muy raro, pero que me ha sucedido es obtener el siguiente error:

"attempt to lock file /home/virtfs/_lock/500 timed out after 25 attempts; lock still held by pid 0
Could not create lock file: /home/virtfs/_lock/500"

Ese error lo he recibido por mail, luego de la ejecución del proceso. La solución: borrar el archivo "500"

Nota importante:

Mientras solucionan su problema, pueden recurrir a un "cron web", es decir ejecutar sus programas desde fuera del servidor, si es que son accesibles desde la web. Hay muchísimas opciones, una de las que he usado sin problemas es: http://www.mywebcron.com/


Pueden encontrar más info: http://www.linuxtotal.com.mx/?cont=info_admon_006

martes, 26 de marzo de 2013

¿Cómo obtener la URL de un avatar en BuddyPress?

Este resumen no está disponible. Haz clic en este enlace para ver la entrada.

martes, 19 de febrero de 2013

Automatización avanzada para Community Managers - Caso 2

Los community managers necesitan automatizar tareas, para poder así ocupar su valioso tiempo en actividades estratégicas y de relacionamiento personalizado con clientes. La automatización se encara muchas veces con herramientas gratuitas o no. Pero no debe ser la única forma. Con un poco de programación, se pueden obtener resultados mucho más contundentes y complementarios. En esta serie de artículos publicaremos ejemplos de casos reales que esperamos les sirvan de inspiración, para estar un paso adelante de la competencia!

Ver toda la serie de Automatización.

Requerimiento

Se requiere crear un artículo en WordPress que tenga la forma de un resumen fotográfico de los últimos 16 artículos. Este artículo debe ser enviado en una newsletter de forma automática. La intervención del usuario debe ser nula.

¿Por qué? Para aumentar las lecturas, con un formato más amigable a través del uso de una galería de fotos, creando además la costumbre en el usuario de recibir esta información con cierta frecuencia.

En la siguiente imagen se puede ver un ejemplo:




Herramientas involucradas

  • WordPress
  • WordPress API
  • PHP
  • MySQL
  • Cron
  • RSS
  • MailChimp

Enfoque de solución

1. Un proceso PHP controla frecuentemente si se ha alcanzado la cantidad de 16 nuevos artículos con fotos, luego de la publicación del último resumen fotográfico  Para ello programamos el Cron de nuestro server para que ejecute el proceso por lo menos una vez al día. Además hemos creado una tabla en MySQL para guardar el ID de último artículo procesado.

2. Utilizando la API de WordPress, creamos un artículo en nuestro sitio con el HTML y estilo que nos guste, agrupando las fotos según nuestro criterio. Cada foto tendrá un link al artículo al que haga referencia.

3. El RSS de nuestro sitio publicará el resumen fotográfico como una artículo nuevo. Aquí no hay que hacer nada, es una funcionalidad estándar.

4. Dentro de MailChimp, creamos una campaña basada en nuestro RSS y seleccionamos en que días y horarios puede ser enviada. Esto cierra el circuito. Sólo hay que sentarse a esperar que el sistema genere los resúmenes por nuestra cuenta. Y que MailChimp los tome de nuestro RSS y así lo envíe a nuestros lectores.

Quizá parezca complicado, pero está hecho con pocas líneas de código. La imagen lo resume:




Los puntos más importantes son:
  1. Crear una consulta SQL para detectar las novedades que contengan fotos.
  2. Crear una tabla para almacenar el id de la última novedad procesada.
  3. Aprender a usar la API de WordPress para crear el post.
  4. Crear una campaña RSS en MailChimp.

Beneficios:

Los resúmenes sirven para recuperar lecturas perdidas. Si el resumen es vistoso y frecuente, más interés generará. Luego de implementar la acción, el tráfico aumentará con nada de esfuerzo.

Enlaces de interés:


Quedo a la espera de preguntas, comentarios e ideas. Saludos!

miércoles, 6 de febrero de 2013

Automatización avanzada para Community Managers - Caso 1

Los community managers necesitan automatizar tareas, para poder así ocupar su valioso tiempo en actividades estratégicas y de relacionamiento personalizado con clientes. La automatización se encara muchas veces con herramientas gratuitas o no. Pero no debe ser la única forma. Con un poco de programación, se pueden obtener resultados mucho más contundentes y complementarios. En esta serie de artículos publicaremos ejemplos de casos reales que esperamos les sirvan de inspiración, para estar un paso adelante de la competencia!

Ver toda la serie de Automatización.

Requerimiento

Se requiere que cuando el administrador de un sitio en WordPress vote positivamente un contenido, ese contenido sea publicado 5 veces en Twitter y en una página de Facebook, en diferentes días y horarios.

¿Por qué? Para aumentar el tráfico hacia el sitio, ya que la mayoría de los seguidores, no leen todos los tweets de las cuentas que siguen.

Herramientas involucradas

  • WordPress
  • PHP
  • MySQL
  • Cron
  • IFTTT
  • Twitter
  • Facebook


Enfoque de solución

1. En WordPress, el administrador marcará las publicaciones importantes desde la interfaz web. Esto puede realizarse de distintas formas e incluso puede depender de los plugins que utilices. Lo que nos importa es que deje un rastro en la base de datos. Está será la única intervención manual del usuario.

2. Un programa PHP se ejecutará con cierta frecuencia y detectará las publicaciones que han sido marcadas por la cuentas del administrador únicamente. ¿Cómo lo detecta? Simplemente haciendo una consulta a la base de datos.

3. Cuando detecte esas entradas, las programará cargándolas en una tabla SQL con la fecha en que deberán ser enviadas a las redes sociales. Se trata de una programación automática de tareas e inteligente. El sueño de muchos community managers :-)

4. Otro programa PHP se ejecutará cada 15 minutos buscando en la tabla SQL las publicaciones a enviar. Cuando las detecte, las enviará vía correo electrónico a una cuenta de IFTTT. Este simple envío de correo, nos comunica con el mundo exterior.

5. Cuando IFTTT reciba los mails, publicará en forma automática en Twitter y Facebook a través de dos recetas. Esto es lo que IFTTT sabe hacer y se configura en 5 minutos.

Y así termina el ciclo. Quizá parezca complicado, pero está hecho con pocas líneas de código. La imagen lo resume:



Los puntos más importantes de la programación:
  1. Crear una consulta SQL para detectar las novedades marcadas por el administrador.
  2. Crear una tabla para almacenar el id de la última novedad procesada.
  3. Enviar un mail a IFTTT.
Si lo piensan, nos es complejo para un desarrollador de software. Y la programación del proceso en el Cron de nuestro server que es muy sencilla.

Beneficios:

Luego de esta implementación, el community manager, sólo marca en WordPress lo que quiere enviar a las redes en diferentes días y horarios. Incluso esto podría automatizarse, si encontráramos un buen criterio para detectar lo importante. Y así quedaría 100% automatizado.

En la práctica, esto puede aumentar el tráfico a tu sitio en forma importante y con poco esfuerzo.

Enlaces de interés:


Quedo a la espera de preguntas, comentarios e ideas. Saludos!

miércoles, 5 de diciembre de 2012

¿Cómo programar en el tiempo un proceso PHP que acceda a la API de WordPress y envíe un mail?

Vamos a suponer que tenemos el requerimiento de crear un proceso con estas características:

  • Se ejecute en forma periódica
  • Consulte datos de la base de datos de WordPress
  • Cree un post en WordPress en forma automática
  • Envíe un correo electrónico
Para encarar este requerimiento, seguiremos los siguientes líneamientos
  1. Creamos una página PHP
  2. Que pueda acceder a nuestros datos de WordPress
  3. Que pueda acceder a la API de WordPress
  4. Que pueda enviar un correo electrónico
  5. Programamos la ejecución de la página con el cron de nuestro hosting.

1 ¿Cómo hacer que nuestra página PHP tenga acceso a WordPress?

Para ello agregamos al principio las siguientes líneas de código:

<?php 

  $_SERVER[ 'HTTP_HOST' ] = 'TU-HOST';
  $wp_load_loc = "/homeTU-HOME/TU-USUARIO/public_html/wp-load.php";
  require_once($wp_load_loc);

Los datos exactos de path y usuario, en mi caso que utilizo BlueHost, los obtuve de la sección Stats del Cpanel:



2 ¿Cómo consultamos la base de datos de WordPress?

Esto lo explicamos anteriormente en el artículo de creación de un plugin con acceso a la Base de datos. El código sería el siguiente:

global $wpdb;

  $destacados = $wpdb->get_results("SELECT cadena FROM destacado LIMIT 0,15", "ARRAY_N");

  $titulo = 'Destacado del día';

  $cuerpo = '';

  foreach ( $destacados as $destacado)
  {
  $cuerpo = $cuerpo . $destacado[0];
  }


3 ¿Cómo creamos un post usando la API de WordPress?

Esto es realmente sencillo. De todas maneras, los parámetros pueden varias según nuestras necesidades. Más información en: http://codex.wordpress.org/Function_Reference/wp_insert_post

El código sería:

$new_post = array(
  'post_title' => $titulo,
  'post_content' => $cuerpo,
  'post_status' => 'draft',
  'post_author' => 1,
  'post_type' => 'post'
  );
$post_id = wp_insert_post($new_post);

En caso que queramos efectuar una salida por pantalla para hacer pruebas, podemos usar el siguiente código:

  echo '<meta http-equiv="content-type" content="text/html; charset=utf-8"></meta>';
  echo $titulo; 
  echo $cuerpo;


4 ¿Cómo enviamos un correo electrónico?

El último paso es enviar el correo, para lo cual usamos este código:

 mail("blabla@blabla.com", $titulo, $cuerpo );


5 ¿Cómo programamos la ejecución periódica de nuestro proceso?

Para programar la tarea en el cron de BlueHost, vamos a la sección advanced del Cpanel de BlueHost:


Lo más importante es programar el comando. BlueHost nos ayudará, pero puede quedar una línea como la siguiente:

/ramdisk/bin/php5 -c /home/USUARIO/PathTo/php.ini /home/USUARIO/public_html/wp-content/test.php

Donde los datos más importantes son el Home, el Usuario y la página en sí que hemos creado.


Imagine el poder que podemos dar a nuestro sitio con esto!!!

Eso es todo por hoy, cualquier duda me consultan.
Hasta la próxima!

miércoles, 3 de octubre de 2012

El feo mensaje "Error establishing database connection"

¿Cansado del feo mensaje "Error establishing database connection en tus instalaciones de WordPress"


¿Te gustaría cambiarlo por algo así?


Simplemente crea un archivo php llamado db-error.php y súbelo a la carpeta wp-content de tu instalación de WordPress. Además de dejar un mensaje más amigable, te enviará un correo.


Aquí les dejo el código:

<?php // página de error de base de datos a medida

  header('HTTP/1.1 503 Service Temporarily Unavailable');
  header('Status: 503 Service Temporarily Unavailable');
  header('Retry-After: 600'); // 1 hour = 3600 seconds

  mail("webmaster@autonautas.com", "Error en la base de datos", "Hay un problema con la base de datos", "From: Autonautas Monitor");

?>

<!DOCTYPE HTML>
<html>
<head>
<title>Algo anda mal</title>
<style type="text/css" media="screen">
* { margin: 0; padding: 0; }
body {
        margin: 100px;
        padding: 0;
        font-family: Verdana, Arial, Helvetica, sans-serif;
        font-size: 100.01%;

        color: #000;
        background: #fff;
        text-align: center;
    }
#header {
        font-size: 0.8em;
        width: 700px;
        margin: 0 auto;
        text-align: left;
        border: 1px solid #999; }
#header h1 {
        background: url(http://www.autonautas.com/wp-content/uploads/2012/03/logo-login.png) no-repeat;
        position: relative;
        width: 370px;
        height: 100px;
        margin-left: 15px;
        margin-top: -40px;}

p {    margin: 1em; padding: 0em; line-height: 2em; }

</style>
</head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
<body>
<div id="header">
<h1></h1>

<p>Parece que Autonautas ha recibido una importante cantidad de visitas en un corto período de tiempo. Esto pudo haber ocasionado una saturación de la base de datos en nuestro servicio de hosting.</p>

<p>Ya hemos sido notificados. Por favor, espera unos minutos y vuelve a intentar nuevamente. Disculpa las molestias ocasionadas.</p>
</div>
</body>
</html>


Y aquí los enlaces de las fuentes de esta solución:
Hasta la próxima!

domingo, 5 de agosto de 2012

¿Cómo desarrollar un plugin para WordPress?

Si trabajas con WordPress sabrás que una de las formas más utilizadas de extender la plataforma es a través de los Plugins. Quizá muchas veces te has encontrado utilizando plugins construidos por terceros, pero nunca te has embarcado en la tarea de desarrollar un plugin. Aunque no lo creas, no es una tarea compleja, si ya posees conocimientos de programación.

En este breve artículo, explicaremos cómo construir uno sencillo. Espero te resulte útil!

imageAlcance de este pequeño plugin

Trabajo en algunos proyectos en WordPress en donde además de permitir el registro de usuarios por el método estándar, también permito que los usuarios ingresen al sistema con sus cuentas de Twitter o Facebook, para lo cual utilizo plugins existentes.

Sin embargo, en algunos casos, estos plugins permiten a los usuarios ingresar al sistema sin especificar su correo electrónico (en realidad eso depende de como los configures).

Lo que vamos a hacer en este breve ejemplo, es construir un plugin que le recomiende a los usuarios que no tengan configurado bien su correo, que lo hagan. Para ello agregaremos un widget en la SideBar con un cartel de advertencia, como el que puede verse la imagen de la derecha

Funcionamiento

Parte 1: verificación del correo del usuario

Nuestro plugin tendrá un funcionamiento sencillo.
Primero crearemos una función para consultar el correo electrónico del usuario. Trabajaremos con dos funciones de WordPress:
  • is_user_logged_in: para verificar si hay un usuario conectado.
  • wp_get_current_user: para obtener la cuenta de correo del usuario conectado.
En nuestro caso, a los usuarios que ingresan usando la autenticación de Twitter o Facebook, se les crea un correo electrónico obligatorio ficticio:
  • Los de Facebook contienen el dominio “unknown.com”
  • Los de Twitter comienzan con el nombre “changeme”
Nuestro algoritmo determinará si el correo posee esas cadenas para decidir si tiene que advertir o no al usuario.


Parte 2: widget

La segunda parte se encargará de mostrar una advertencia al usuario en un widget que podrá agregarse en el SideBar:
image

Además agregará un link que lleve al usuario a la página de configuración de su correo. En nuestro caso, como se trata de una red social vertical creada con el plugin BuddyPress, utilizaremos datos globales de BuddyPress que podemos obtener con la instrucción:

global $bp;

Y en particular la URL del perfil con:

$bp->loggedin_user->domain

¿Cómo se construye el plugin?

Simplemente se crea el código PHP respetando el encabezado especificado por WordPress (el código lo pueden ver en la próxima sección). El archivo puede grabarse como main.php y almacenarse en una carpeta dentro de la carpeta: /wp-content/plugins/. También será necesario almacenar un archivo readme.txt.

Una vez que hayamos almacenado el plugin en la carpeta correspondiente aparecerá en la lista de nuestros plugins inactivos listo para activarlo:

image

Una vez activado, sólo nos queda agregar el widget en la SideBar y ya podemos comenzar a utilizarlo.

image

El código

A continuación les pego el código completo:

<?php

/*
Plugin Name: Autonautas Mail Verification
Plugin URI: http://viviendoenlaeradelaweb20.blogspot.com/
Description: Verifica que el usuario tenga bien configurado su correo. Caso contrario emite una alerta en el SideBar.
Version: 1.0
Author: Juan Pablo Pussacq Laborde
Author URI: http://viviendoenlaeradelaweb20.blogspot.com/
License: GPL2
*/

function autonautas_mail_read () {

    $resultado = "OK";

    // Sólo se controla al usuario conectado
    if ( is_user_logged_in() ) {

        $usuario_actual = wp_get_current_user();
        $correo_actual = $usuario_actual->user_email;

        // Sufijo que tienen los mails de los usuarios registrados con Twitter
        $buscado_t = strpos($correo_actual, "changeme");

        // Sufijo que tienen los mails de los usuarios registrados con Facebook
        $buscado_f = strpos($correo_actual, "unknown.com");

        if ( ($buscado_t !== FALSE) or ($buscado_f !== FALSE) ) {
            $resultado = "MAL";
            }
        }

    return $resultado;
}

add_action('wp_head','autonautas_mail_read');

function autonautas_mail_widget () {

    $estado_correo = autonautas_mail_read ();
  
    if ( $estado_correo !== "OK" ) {

        global $bp; // Datos globales de BuddyPress

        echo "<p></p>";
        echo "<div style='padding: 15px; color: black; border-radius: 3px; background-color: white; border: 7px solid red;' id='autonautas_mail_verification'>";
        echo "<p></p>";
        echo "<center>";
        echo "<h3>Advertencia!!</h3>";
        echo "</center>";
        echo "<p></p>";
        echo "<p>Tu correo electrónico no está configurado. Ante cualquier problema con tu cuenta no podremos contactarte <a href='/2011/11/configura-tu-correo/'>[...]</a></p>";
        echo "<p></p>";
        echo "<p></p>";
        echo "<center>";
        echo "<img src='/wp-content/uploads/2011/08/mensajes.png'></img>";
        echo "<div id='autoayuda' class='activity-list'><div class='activity-header'><a width: 120px ; display: block; ' href='" . $bp->loggedin_user->domain . "settings/'>Configura tu correo</a></div></div>";
        echo "</center>";
        echo "<p></p>";
        echo "<p></p>";
        echo "</div>";
        }
}

wp_register_sidebar_widget('autonautas_mail_verification', 'autonautas_mail_verification', 'autonautas_mail_widget');

?>

Conclusión

Como pueden ver, crear un plugin no es complicado y muchas veces puede ayudarnos con ciertas actividades que no podemos resolver con otros plugins. Espero que les haya servido.

Hasta la próxima!

Enlaces de interés:

martes, 19 de junio de 2012

¿Cómo agregar código PHP en WordPress?

Si se han encontrado con esta necesidad, les recomiendo que vean este artículo en donde nos presentan algunas opciones y nos recomiendan la forma más segura de hacerlo:
Writing php code to your WordPress posts and pages the safe way

lunes, 11 de abril de 2011

¿Cómo instalar #WordPress en Windows?

1) Instalá XAMPP y asegurate que Apache y MySQL estén levantados:

image

2) Descomprimí WordPress en una carpeta cualquiera dentro de “C:\xampp\htdocs”.

Podés descargarlo desde: http://es.wordpress.org/

3) Creá una base de datos desde la administración de MySql

4) Configurá los parámetros de base de datos en el archivo “wp-config.php.”:

define('DB_NAME', 'nombre de la base');

define('DB_USER', 'root');

define('DB_PASSWORD', '');

5) Ejecutá “http://localhost/{carpeta en donde instalaste}/wp-admin/install.php”

y…

image

Nota: en caso que obtengas un error como el siguiente:

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\wp-config.php:1) in C:\xampp\htdocs\autos\wp-login.php on line 354
Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\wp-config.php:1) in C:\xampp\htdocs\autos\wp-login.php on line 366

Es porque has usado el bloc de notas de windows y no has grabado con formato ANSI. Graba en ANSI y todo resuelto:

image