Contenido

Hey Social, primer plugin de Wordpress con heySilver

3 Sep

+ 5

Andrea Olivato ha desarrollado hey social, un plugin para Wordpress que usa heySilver y que te permite incorporar a tu Wordpress un interface de teclado similar a QuickSilver en MacOs o a Ubiquity en Firefox 3con el que poder enviar un artículo a las principales redes sociales.

hey_social

Podeis verlo funcionando en la propia página de Andrea y descargarlo directamente desde el directorio de plugins de Wordpress.

CommentFeed, comenta en aNieto2k desde Google Reader

28 Ago

+ 40

En el Congreso de Webmasters de 2007, Jose de Corral (de Macbookers) me comentó una idea que le daba vueltas por la cabeza y quería saber si era posible

La idea era la de comentar en el blog directamente desde tu lector de feeds.

Pros:

  • El usuario perezoso comenta.
  • Disminución de tiempo empleado por el usuario en leer y comentar sus feeds.
  • Ofrecer una opción más al usuario.
  • Incremento de comentario

Contras:

  • El usuario no ha de entrar al blog a comentar.
  • Posible de reducción de visitas.

Bueno, despues de casí 300 días creo que os puedo presentar la versión alpha y exclusiva para aNieto2k de CommentFeed (me he estrujado el cerebro ¿eh? :D)

¿Por que exclusiva?

Por un motivo muy sencillo, aún está muy verde. La versión que tengo está desarrollada para aNieto2k y he de pensar como montar un plugin para poder usarlo en cualquier blog sin problemas, pero me gustaría ponerme a ello después de haber testado bien el código que interviene.

¿Como funcionaría?

La idea es muy sencilla, pero requiere la intervención de las dos partes involucradas en la lectura de feeds. Por una parte, el blogger, deberá activar un plugin (aún no tengo muy claro si hará falta algo más) para permitir comentar en el blog, si el blogger no lo activa, el usuario no podrá comentar en el blog directamente desde Google Reader.

Por otra parte, el usuario deberá tener un Marcador (o Script del GreaseMonkey, o algún otro método que se me ocurra) que ejecutará cuando quiera comentar en un blog desde Google Reader.

* El funcionamiento aún puede variar, pero la idea general es la explicada anteriormente.

¿Por que Google Reader?

Por el momento es solo Google Reader, principalmente por que es el lector de feeds que utilizo, y me ha ido perfecto para hacer las pruebas, la idea es intentar conseguir exactamente lo mismo desde cualquier otro Lector de Feeds online (los offline no creo que sea factible, pero no lo descarto por el momento).

¿Como puedo comentar en aNieto2k desde Google Reader?

Pues por el momento, solo tenemos un Marcado que deberemos ejecutar cada vez que queramos comentar.

Una vez guardado el Marcador, ya podemos ir a Google Reader y pulsar sobre él.

commentfeed-testigo

En la parte superior de la pantalla veremos, junto al formulario de busqueda de Google Reader, un testigo verde, indicando que podemos hacer uso de CommentFeed.

Una vez activado, veremos en la parte inferior del post, en la barra de acciones una nueva opción más, “Comentar”.

commentfeed-comenta

Al hacer click sobre la nueva acción, nos mostrará un formulario, ubicado en la parte superior-izquierda de la ventana en la que nos encontramos un formulario con el que podemos comentar directamente en la entrada que tenemos abierta.

commentfeed

¿Posibles problemas?

Muchos y muy variados. He probado en Firefox y Safari, ha funcionado perfectamente, pero pueden producirse problemas que aún no he podido detectar.

Uno que se me ocurre ahora, es la URL con la que se guardó el Feed en Google Reader, el correcto es el siguiente:

http://www.anieto2k.com/feed/

Al usar el plugin de FeedBurner, puede ser que la URL del feed no sea la correcta. Lo podemos saber si el enlace de los artículos apunta directamente a aNieto2k o a FeedBurner.

Si ocurre algún problema, me sería muy útil que me lo comentarais para intentar solucionarlo.

¿Que te parece?

¿La lista definitiva para los usuarios de Wordpress?

26 Ago

+ 4

No se si será la definitiva, lo que está claro es que es una de las más completas que he encontrado nunca por internet. En ella encontrarás todos, o casi todos, los artículos que puedas necesitar a medida que vas aprendiendo a usar Wordpress y las capacidades de este CMS te van corriendo por la venas. Evidentemente lo encontré gracias a AyudaWordpress ;) (Al parecer lo han quitado ya que el enlace era un copypaste de Blog En serio, corregido el enlace)

8 plugins con los que mejorar en SEO de tu Wordpress

21 Ago

+ 3

El SEO es una parte muy importante de cualquier página en Internet. Nuestro Wordpress no debería ser menos y aparecer en los primeros resultados de los buscadores no debería ser cosa de los que pagan más, sinó de los que lo hacen mejor.

Una forma de hacer frente a esto es usando plugins que nos ayudan a mejorar la salida del HTML para que cuando el GoogleBot nos lea se quede encandilado con nuestro Wordpress y nos posicione mejor. Aunque hay que tener en cuenta que el contenido es lo realmente importante, esta ayuda extra siempre la vamos a agradecer :D

  1. HeadSpace2
  2. Redirection
  3. SEO Friendly Images
  4. SEO Slugs
  5. Robots Meta
  6. RSS Footer
  7. Yoast Breadcrumbs
  8. WP Page Numbers

via

WP Super Cache 0.6.7

20 Ago

+ 1

WP Super Cache, uno de los plugins de cacheo de páginas para nuestro Wordpress se actualiza a la versión 0.6.7.[Descargar]

Crea plugins para Wordpress en una sola línea

30 Jul

+ 1

Hoy Mark on Wordpress, publicaba un ejemplo de plugin de una sola línea, con el que hacemos que el panel de planificación de publicación aparezca desplegado por defecto.

add_action('admin_head',create_function('$a', "echo \"<script
type='text/javascript'>\n<!--\naddLoadEvent(function(){if(jQuery('.edit-timestamp')){jQuery('.edit-timestamp').click();}});\n//-->\n</script>\";"),50);

Como vemos la magia de este sistema es gracias a la función create_function(), con la que podemos crear funciones usandolas como parámetro de la función add_action() o add_filter(), funciones que nos permiten añadir funcionalidades a Wordpress.

create_function()

create_function(String $args, String $codigo);

Con create_function() generamos funciones y la función nos devuelve el nombre de la función con la funcionalidad que le pasemos como parámetro $codigo, para los parámetros usaremos el primer parámetro de la función.


//Sin create_function()
function func($str) {
     return str_replace("_", "-", $str);
}
//Con create_function()
$func = create_function('$param', 'return str_replace("_", "-", $str);');

Esto me recuerda mucho a la posibilidad de declarar variables como funciones.

// Javascript
var myFunc = function(str) {alert(str);
// PHP
$myFunc = create_func('$str', 'echo $str');

Intentemos convertir en una línea el hack para evitar buscar en las páginas de tu Wordpress.

add_filter('query_vars', create_function('$vars', 'array_push($vars); return $vars;'));

StatPress, estadísticas en tiempo real para tu Wordpress

21 Jul

+ 9

Hace unos días me preguntaron por estado de PopStats, y desde que Luis Sancho dejara de darle soporte este gran plugin ha ido soportando versiones de Wordpress hasta chocarse de frente con Wordpress 2.6, que al parecer no funciona correctamente (no lo he probado).

Pensé en tomar las riendas del proyecto y usarlo de base para crear un plugin nuevo compatible con esta última versión, pero esta mañana en AyudaWordpress me he encontrado StatPress. Un plugin de estadísticas en tiempo real que me ha llamado mucho la atención.

statpress1

No he podido probar que tal se porta contando estadísticas pero la primera impresión es que ofrece una buena cantidad de datos e información relevante para observar el crecimiento/decrecimiento del blog.

Página del autor | Daniele Lipi / Descargar | Wordpress.org

Muestra los usuarios que cumplen años en tu web

18 Jul

+ 3

Hace ya tiempo que la BlogoEdad está recopilando datos de los usuarios registrados, actualmente hay 2125 usuarios registrados, y ya hemos llegado al punto en el que al día hay varios usuarios que cumplen años y he pensado que podría estar bien explicar como usar el API para integrarlo en nuestros blogs.

Desde PHP

<?php
class BlogoEdadApi {
	var $xmlFile = 'xml/'; // Indicamos el directorio

	function show($dia, $mes) {
			echo $this->felicitaciones($this->get($dia, $mes));
  	}

	  function get($dia, $mes) {
	  	$this->xmlFile .= $dia.$mes.'.xml';
	  	  if (file_exists($this->xmlFile) && filemtime($this->xmlFile) < 86400 + time())
				$xml = $this->getFromFile($this->xmlFile);
			else
				$xml = $this->getFromUrl('http://edad.anieto2k.com/api.php?d='.$dia.'&m='.$mes);
			return $this->parseXML($xml);
	  }

	  function getFromFile($xmlFile) {
	  	if (!function_exists("file_get_contents")) {
	  		$gestor = fopen($xmlFile, "r");
				$xml = fread($gestor, filesize($xmlFile));
				fclose($gestor);
	  	} else {
	  			$xml = file_get_contents($xmlFile);
	  	}
	  	return $xml;
	  }

	  function getFromUrl($url, $cache = true){
	  	if (!function_exists("file_get_contents")) {
	  			$ch = curl_init();
					curl_setopt($ch, CURLOPT_URL, $url);
					curl_setopt($ch, CURLOPT_HEADER, 0);
					$file = curl_exec($ch);
					curl_close($ch);
	  	}else {
	  		$file = file_get_contents($url);
	  	}
	  	if ($cache) $this->saveCache($this->xmlFile, $file);
	  	return $file;
	  }

	  function saveCache($xmlFile, $str) {
 	 		if(!is_writable(dirname($xmlFile))) die("Imposible almacenar el fichero XML, prueba darle permisos de escritura a la carpeta donde se alojan.");
	  		$fh = fopen($xmlFile ,"w");
	    	fwrite($fh,$str);
	    	fclose($fh);
	   }

	  function parseXML($xml) {
	  	// Parseo de XML
			$doc = new DOMDocument();
			$doc->loadXML($xml);
			$nodes = $doc->getElementsByTagName("user");

			$usuarios = array();
			if ($nodes->length > 0) { // Hay usuarios
	        for ($i = 0; $i < $nodes->length; $i++) {
	        		array_push($usuarios, array(
	        				'id' => $nodes->item($i)->getElementsByTagName('id')->item(0)->nodeValue,
	        				'name' => $nodes->item($i)->getElementsByTagName('nombre')->item(0)->nodeValue,
	        				'url' => $nodes->item($i)->getElementsByTagName('url')->item(0)->nodeValue
	        		));
	       }
			}
			return $usuarios;
	  }

		function felicitaciones($usuarios) {
			if (!is_array($usuarios) || sizeof($usuarios) == 0) return '<ul><li>No hay felicitiaciones hoy</li></ul>';
			$salida = '<ul>';
			foreach ($usuarios as $user) {
						$salida .= '<li><a href="'.$user["url"].'">'.$user["name"].'</a></li>';
			}
			$salida .= '</ul>';
			return $salida;
		}
}
?>

He pensado que para evitar saturación de peticiones, use un sistema de caché almacenando un fichero cada día y así por sitio web se lanzará un petición por día. Para ello hay que definir una carpeta con permisos descritura donde alojar estos ficheros XML.

anieto2k@eNToR:~/public_html$ mkdir xml
anieto2k@eNToR:~/public_html$ chmod 777 xml

Para usar esta clase, únicamente tendremos que insertar donde queramos el siguiente código.

<?php
include ("class.blogoedad.php");

$edad = new BlogoEdadApi();
$edad->show(date("d"), date ("m")); //Día actual del sistema.
// Devolver un Array
$arrayUsuarios = array();
$arrayUsuarios = $edad->get(03, 11); // Un array de los nacidos el 3 de noviembre.
foreach ($arrayUsuarios as $user)
....
?>

Descargar class.blogoedad.php. Tambien teneis una demo del resultado.

Plugin Wordpress

Si eres un usuario de Wordpress, he pensado que sería más fácil simplemente activar un plugin y tener un par de funciones disponibles para insertarlo fácilmente en nuestro theme.

Instalación

  1. Descargar el plugin
  2. Descomprimir y subir a la carpeta wp-content/plugins/ de nuestro Wordpress
  3. Crear la carpeta xml/ dentro del directorio blogoedad/ de wp-content/plugins/
  4. Aplicarle estilos de escritura al directorio xml/
  5. Activar el plugin

Modo de empleo

En nuestro theme podremos usar 2 funcione que nos mostrarán los datos que solicitemos.

<?php if (function_exists("BlogoEdad"))
               BlogoEdad(); //Por defecto HTML, cualquier otro valor devolverá un array ?>

Insertamos la línea anterior donde quereamos que aparezca un listado de los Bloggers que cumplen años hoy.

<?php if (function_exists("BlogoEdadDay"))
               BlogoEdadDay(14, 08); //Por defecto HTML, cualquier otro valor devolverá un array ?>

Nos devolverá un listado con los usuarios que cumplan años el día 14 de agosto.

Tambien podemos trabajar con array haciendo que la función devuelva un array en lugar de la estructura HTML y así formarla nosotros mismos.

<?php if (function_exists("BlogoEdad")) BlogoEdad('array');
      //  o
      if (function_exists("BlogoEdadDay")) BlogoEdadDay(14, 08, 'array'); ?>

Wordpress 2.6 y los desarrolladores de plugins

3 Jul

+ 12

Ozh, escribe un artículo en el que nos muestra los cambios más significativos de la nueva versión de Wordpress, la 2.6, en relación a los desarrolladores de plugins.

Puesto que han cambiado muchas de las opciones del núcleo de Wordpress, nos veremos obligados a realizar modificaciones de la mayoría de plugins.

1. El directorio wp-content

Vimos que Wordpress daba la posibilidad de sacar la carpeta wp-content/ de la carpeta web y esto ha ocasionado una gran cantidad de cambios entre ellos el nacimiento de dos nuevas constantes que se encargan de conocer la nueva ruta.

Actualmente usamos la constante ABSPATH para hacer referencia a la ruta de la raiz de nuestro Wordpress.

$plugin_path = ABSPATH . '/wp-content/plugins/' . plugin_basename(dirname(__FILE__));
$plugin_url = get_option('siteurl') . '/wp-content/plugins/' . plugin_basename(dirname(__FILE__));

Esta constante seguirá disponible, pero ya no tiene por que estar el directorio wp-content/ colgando de la raíz de Wordpress. Por ese motivo tendremos que reemplazarlo para tener un código más permisivo:

// Pre-2.6 compatibility
if ( !defined('WP_CONTENT_URL') )
	define( 'WP_CONTENT_URL', get_option('siteurl') . '/wp-content');
if ( !defined('WP_CONTENT_DIR') )
	define( 'WP_CONTENT_DIR', ABSPATH . 'wp-content' );
// Cogemos la ruta
$plugin_path = WP_CONTENT_DIR.'/plugins/'.plugin_basename(dirname(__FILE__));
$plugin_url = WP_CONTENT_URL.'/plugins/'.plugin_basename(dirname(__FILE__));

Nacen WP_CONTENT_DIR y WP_CONTENT_URL, dos constantes que tendremos que tener muy presentes.

2. Incluyendo el fichero wp-config.php

El fichero wp-config.php tambien permite ser sacado de nuestra carpeta web, lo que significa que tenemos el mismo problema anterior, no debemos creer que todos los usuarios lo tendrán instalado en la raíz de su Wordpress.

Antiguamente, al estar wp-content/ en la raiz podíamos usar../../../ para llegar al directorio raíz y usar wp-config.php en nuestros plugins.

require_once('../../../wp-config.php');

Esto en Wordpress 2.6, tambien ha cambiado:

$root = dirname(dirname(dirname(dirname(__FILE__))));
if (file_exists($root.'/wp-load.php')) {
	// WP 2.6
	require_once($root.'/wp-load.php');
} else {
	// Antes de 2.6
	require_once($root.'/wp-config.php');
}

Poco a poco van cerrandose los tickets del Roadmap y va quajando más lo que tendremos los usuarios y desarrolladores de Wordpress 2.6, así que mientras tanto, tendremos que estar atentos a todos estos cambios.

Wordpress Exploid Scanner 0.1, checkea la seguridad de tu blog

27 Jun

+ 6

Wordpress Exploid Scanner, se encarga de revisar por nosotros los ficheros de nuestro Wordpress para econtrar posibles puntos débiles por los que nos podrían atacar mediante un exploid a la base de datos. Posee una lista de posibles ataques que comprueba cuando lo solicitamos. [Descargar]