Redireccionar todas las páginas al index con htaccess

Cómo redireccionar todas las páginas de un sitio al index del sitio exceptuando los archivos que sean recursos (css, javascript, imagenes, etc).
Todos los directorios (reales o falsos) serán redireccionados a la página principal o index.
Nota que puedes agregar o quitar las extensiones de los archivos (js|css|gif|jpg|jpeg|png|ico|swf|pdf) dependiendo de tus necesidades.

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !\.(js|css|gif|jpg|jpeg|png|ico|swf|pdf)$
RewriteCond %{REQUEST_URI} !=/
RewriteRule ^(.*)$ / [L,R=301]

Via: http://snipplr.com/view/51082/

Hacks de CSS específicos para Firefox

Traducción del artículo CSS Hacks Targeting Firefox de css-tricks.com

Con estos pedazos de código puedes hacer ajustes exclusivos para Firefox que, aunque lo hace muy bien, hace algunas cosas raras de vez en cuando con el código.
Para esos momentos incomodos en que el viejo zorro hace lo que quiere con el código lo podemos poner en cintura con estos tres códigos específicos.

Firefox 2

html>/**/body .selector, x:-moz-any-link {
  color:lime;
}

Firefox 3

html>/**/body .selector, x:-moz-any-link, x:default {
  color:lime;
}

Cualquier Firefox

@-moz-document url-prefix() {
  .selector {
     color:lime;
  }
}

Via: CSS Hacks Targeting Firefox

7 razones por qué no debes facturar por hora

Traducción de un artículo escrito por Matthew Griffin llamado 7 Reasons You Shouldn’t Charge by the Hour.

Aquí hay siete razones por las que evitar la facturación por hora como de la peste.

1. Pierdes mucho tiempo

Constantemente iniciar y detener temporizadores es una práctica que molesta, requiere mucho tiempo y es completamente contraproducente. Además, si olvidaste iniciar el temporizador o te olvidas sobre el tiempo completamente entonces terminaras con un lío de horas. Tarifas planas de facturación evitan estos problemas completamente.

2. Pone nerviosos a los clientes

Te sorprenderías de lo mucho mas cómodo que se sentirán tus clientes si saben exactamente cuánto van a gastar. La facturación por hora abierto, incluso acompañado por una cifra aproximada, hace que el comprador se ponga nervioso. La facturación en una tarifa plana hace que el cliente se sienta seguro aunque sepan que de la otra forma pueden pagar mas.

3. Se estimula a una menor productividad

Cuando trabajas por hora, no hay incentivo para trabajar más rápido o más inteligente. De hecho, mientras mas lento trabajas mas te pagan. La tarifa plana estimula a trabajar mas eficientemente.

4. Tiende a hacer trabajos tediosos de mantenimiento

Algunos pueden pensar de manera diferente acerca de esto, pero a mi no me gusta hacer las actualizaciones en los sitios feos que no he diseñado. La facturación por hora se presta a este tipo de trabajo. Yo quiero dedicar mi tiempo en diseñar nuevos sitios y ayudar a mis antiguos clientes. La tarifa plana te ayudará a hacer más de lo que te gusta hacer.

5. No detiene las características escurridizas

Un error común acerca de la facturación por hora es creer que pone fin a la característica escurridiza (ese botón que despiega un lightbox que luego despliega un formulario que luego… ya tienes la idea). En realidad, lo único que hace es frustrar al cliente. En su mente, cada vez que pide algo que debería haber sido incluido en la estimación de tiempo original, se sienten golpeados con cargos adicionales injustos. Comience con una tarifa plana con un montón de tiempo de relleno para este tipo de características, y esa frustración va a suceder en raras ocasiones.

6. Afecta severamente el potencial de facturación

Imagínate dando un estimado de $3.000 para un sitio web muy básico. Digamos que has trabajado en diseño de sitios web por un tiempo y ya te estas volviendo muy rápido. Ya sabes que te llevará alrededor de diez horas completas de trabajo terminar el proyecto. La facturación por hora, pone tu tarifa en $300 por hora. Suena demasiado cuando lo pones en esos términos. No tienen idea de cuánto trabajo y esfuerzo te ha llevado perfeccionar tus habilidades para tu nivel actual. Ese mismo sitio te puede haber tomado cincuenta horas la primera vez que comenzaste a diseñar sitios web. La tarifa plana te permite facturar lo que realmente valen tus servicios.

7. Anima a los clientes a abusar de ti

Cuando se factura por hora, los clientes tienden a discutir y se quejan de todos y cada pequeño cargo que se les haga, ya que ellos pueden ver cada pequeño cargo en la factura. Cuando el cliente siente que lo estás engañando al no trabajar lo suficientemente rápido, se puede poner de muy mal humor. La tarifa plana mantiene a todo el mundo feliz.

He tenido un gran éxito con las tarifas planas y seguiré apostando por ella. No es sólo un poco mejor que la facturación por hora, es del día a la noche. Si realmente logras manejar una buena tarifa plana, nunca vas a querer mirar hacia atrás. Eso no quiere decir que esto va a resolver todos los problemas de facturación que hayas tenido alguna vez, pero seguro que va a resolver un montón de ellos.

Redireccionar un dominio con apache para mejorar el SEO

Google recomienda hacer las redirecciones de dominios por el servidor por que esta función le corresponde al servidor (con apache) y no a las aplicaciones tipo php o html.

El objetivo de este tutorial es que al escribir http://dominioviejo.com vaya automaticamente a http://www.dominionuevo.com manteniendo todos los nombres de las páginas y los enlaces.

Los pasos:

1. Asegurate de que tienes 2 sitios web – el sitio antiguo y el nuevo sitio, y que se encuentran en diferentes cuentas (no tiene que estar en IP diferente o diferentes máquinas). Sobre todo que el archivo .htaccess no sea el mismo por que ese es el que vamos a modificar.

2. Tu sitio principal (propio o canónico) debe apuntar hacia el nuevo sitio usando DNS. Todos los viejos dominios deben apuntar hacia el antiguo sitio mediante DNS.
Es decir que Los DNS de http://www.dominionuevo.com apuntan al nuevo servidor con el contenido del sitio nuevo y los viejos dominios hacia el sitio antiguo por DNS.

3. Encuentra el archivo .htaccess en la raíz de tu antigua cuenta. Sí, comienza con un “.” Vamos a trabajar con este archivo. El nuevo sitio no necesita usar esto por que la redirección viene del dominio viejo.

4. Descarga el archivo .htaccess y ábrelo en un editor de texto solamente.

5a. Si tienes el mod_rewrite instalado en el apache, agrega este código:

Options + FollowSymLinks
RewriteEngine on
RewriteCond% {} HTTP_HOST! ^ NEWDOMAIN \ com.
RewriteRule ^ (. *) $ Http://www.newdomain.com/ $ 1 [R = 301, L]

5b. Si no tienes instalado el mod_rewrite, que realmente deberías, yno se puede instalar, entonces puedes utilizar este código en su lugar:

RedirectMatch 301 ^ (. *) $ Http://www.newdomain.com

6. Luego, sube el archivo a la carpeta raíz y prueba tu nueva redirección.

Opcional: Puedes asegurarte que hace la redirección 301 correcta con un HTTP Header viewer.

Puedes leer mas técnicas de redirección aquí: http://www.mcanerin.com/en/articles/301-redirect-apache.asp

Arreglo: z-index de youtube y flash encima de todo

Trabajando hace unos días con un menú desplegable con jQuery noté que en ves de desplegarse por encima del video de youtube el menú se esconde detrás del video.

Primero pensé que era un problema de z-index, pero luego de pelear un rato con los posicionamientos y distintos valores de z-index pensé que sería un problema distinto.

El problema está en el browser pone los objetos flash (no solo los videos de youtube) encima de todos los objetos. http://kb2.adobe.com/cps/155/tn_15523.html y por eso hay que asignarle wmode=opaque o wmode=transparent al embed o código que va a producir el SWF.

En el caso de youtube esto se resuelve simplemente colocando ?wmode=opaque al final del código de embed de crea youtube para iframes.

El código original

<iframe width="560" height="315"
src="http://www.youtube.com/embed/xxxxxxx"
frameborder="0" allowfullscreen></iframe>

El código con el wmode aplicado

<iframe width="560" height="315"
src="http://www.youtube.com/embed/xxxxxxx?wmode=opaque"
frameborder="0" allowfullscreen></iframe>

Esta explicación la hace detalladamente Max Morgan en su artículo Fix youtube iframe overlay and z-index issues y donde incluso propone una solucion para automatizarlo vía jQuery.

Luego hizo una adaptación para cuando el codigo ya tiene variables escritas en donde escribes el código al final de toda la dirección

Código con varibles

http://www.youtube.com/watch?v=1YmPooYpyQw?rel=0

Código con varibles y wmode

http://www.youtube.com/watch?v=1YmPooYpyQw?rel=0&wmode=opaque

Teniendo cuidado que es probable que luego de una variable es probable que el ?wmode tenga que ser con un “&” &wmode

Te sirvió? Soy todo ojos.

Actualización: Jair nos escribió una forma de cambiar el atributo wmode via jQuery

$(document).ready(function() {
	$(“iframe”).each(function(){
		var ifr_source = $(this).attr(‘src’);
		var wmode = “wmode=opaque”;
		if(ifr_source.indexOf(‘?’) != -1) {
			var getQString = ifr_source.split(‘?’);
			var oldString = getQString[1];
			var newString = getQString[0];
			$(this).attr(‘src’,newString+’?'+wmode+’&’+oldString);
		} else {
			$(this).attr(‘src’,ifr_source+’?'+wmode);
		};
	});
});

El “Follow Button”de wordpress para usuarios no-wordpress.com

En 2011 WordPress.com implementó una nueva herramienta para seguir/ser-seguido llamada “Follow Button”. Hace unos días (mas de lo que ella quisiera) una amiga me escribió que quería el botón de “Seguir” de wordpress en su blog, y claro, que no quería migrar todo a WordPress.com, y no encontré un plugin que hiciera exactamente esto.

Entonces encontré el artículo de Frederick Giasson llamado WordPress’s Follow Button for Non-WordPress.com Users y lo apliqué en mi blog antes de pasar la información a mi amiga.

El post de Frederick hace dos “mejoras” en el concepto que yo he omitido:

  1. Cambió el icono de “+” por un asterisco naranja.
  2. Añadió un enlace a sus feed RSS.

Para Frederick, “Follow” no se trata sólo de correos electrónicos, también se trata de medios de otros médios de sindicación.

Por último, no quería cortar cualquier parte de código en WordPress ni en ningún otro plugin de WordPress. Lo único que vamos a modificar es el tema, agregando un poco de código para ello. La implementación actual se podría mejorar mediante la actualización Subscriber2 por ejemplo, pero yo no quería que la gente tuviese que hacer esto para crear el botón “Seguir” en su blog.

Paso # 1: Instalación de Subscribe2

Lo primero es lo primero.

La primera cosa que tienes que hacer es instalar el plugin de WordPress que permitirá a los usuarios suscribirse y gestionar sus suscripciones a tu blog a través de mensajes de correo electrónico. Utilizaremos el plugin Subscribe2 para WordPress que ofrece estas características a la instancia de WordPress.

Para instalar este plugin WordPress utilizando el modo automático “del sistema de instalación del complemento, siga estas instrucciones. Lea las instrucciones de instalación del plugin si desea hacerlo de esta manera el manual:

  1. Accede a tu blog de WordPress y visita Plugins-> Agregar nuevo.
  2. Busca Subscribe2, haga clic en “Instalar Ahora” y luego activa el plugin
  3. Haga click en el enlace “Configuración” del menú de administración, y selecciona “Subscribe2”
  4. Configura las opciones al gusto, incluida la plantilla de correo electrónico y cualquier categorías que deben ser excluidos de la notificación
  5. Has click en “Herramientas” en el menú de administración, y selecciona “Suscriptores”
  6. Puedes suscribir manualmente a gente que ya tengas o como mejor te parezca
  7. Crea una página de WordPress nueva para mostrar el formulario de suscripción.
  8. Al crear la página, puedes hacer click en la “S2” en la barra encima del editor de textos para insertar automáticamente la señal subscribe2. O, si lo prefieres, puedes introducir manualmente el shortcode subscribe2 o ficha: [ subscribe2 ] o el HTML invisible
  9. Asegúrese de que el formulario está en una línea por sí mismo y que tiene una línea en blanco arriba y otra abajo. Este código será automáticamente reemplazado por la información de suscripción dinámica y mostrará todos los formularios y mensajes como sean necesarios
  10. En el área “Configuración” de Subscribe2 selecciona el nombre de página que acabamos de crear en el paso anterior en “apariencia”

Seguimiento.

Una vez que hayas terminado de instalar el plugin, puedes comprobar que todo está funcionando visitando la página que creamos en el paso 7 escribiendo tu propio correo electrónico (uno que no esté conectado a cualquier usuario de esa cuenta preferiblemente) y luego verificando en tu bandeja de entrada si usted recibe una notificación de suscripción.

Para probar esta página tienes que estar deslogueado. Sino veras una confirmación de que ya estás registrado.

Paso # 2:

Personaliza tu página

El siguiente paso es opcional. Como el formulario generado por el plugin Subscribe2 es realmente minimalista, es posible que desee personalizarlo un poco, para cambiar su diseño y añadir un poco de explicación en la página, para ayudar a los lectores a entender lo que está pasando. Puedes ver mi página de registro como ejemplo.

Paso # 3:

Agregue el código del botón Seguir en que el tema

El tercer paso es realmente lo que transformará el plugin Subscribe2 en el botón Seguir. Lo que estamos haciendo aquí, es sólo para agregar el código, en el tema, para mostrar el botón Seguir.
Lo primero que tienes que hacer, es localizar en el pie de página de las páginas se generan en el tema.
Abre la carpeta del tema de tu blog:

  • Via FTP: /../wordpress/wp-content/themes/mitema/footer.php.
  • Via Tema: Apariencia > Editor > footer.php

Verifica que esta etiqueta está al final del código. Sino entonces búscala por los archivos del tema por que el código del botón viene justo antes de esto.
Una vez que hayas encontrado la etiqueta podemos pasar a los siguientes pasos.

Nota importante: Si el tema de tu blog no incluye automáticamente jQuery entonces tienes que incluir este código:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js" type="text/javascript"></script>

justo antes de la etiqueta < /head> que en la mayoría de los casos está en header.php.

Si no tienes jQuery cargado, un error de JavaScript será devuelto, y el panel “congelación” de la página web.

Lo único que tienes que hacer es copiar/pegar el código encima de la etiqueta < /​​body> del footer.php y hacer un par de ajustes para que funcione con tu blog.

  1. En la línea #3, sustituir [[ruta-al-icono]] con la ruta del icono wordpress-plus.png. Puedes descargar el icono y el código wordpress-follow.zip para usarlo en tu blog.
  2. En la línea #9, sustituir [[ruta-a-su-SEGUIMIENTO DE PÁGINA DE WORDPRESS]] por la URL de la página de Seguimiento (la que creaste cuando instalaste Subscribe2)
<?php $useragent= $_SERVER['HTTP_USER_AGENT'];if(!preg_match('/android.+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i',$useragent)||preg_match('/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|e\-|e\/|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(di|rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|xda(\-|2|g)|yas\-|your|zeto|zte\-/i',substr($useragent,0,4))){?><style>
#bit, #bit *{*zoom:1;} #bit { bottom: -300px; font: 13px "Helvetica Neue",sans-serif; position: fixed; right: 10px; z-index: 999999; } .loggedout-follow-shelf{position:fixed;right:40%;z-index:999999;bottom:-300px;}.loggedout-follow-normal{position:fixed;z-index:999999;bottom:-300px;right:10px;}.loggedout-follow-typekit{margin-right:4.5em;position:fixed;z-index:999999;bottom:-300px;right:10px;}#bit a.bsub{display:block;overflow:hidden;padding:0 10px 0 8px;float:right;text-decoration:none !important;line-height:28px;font:normal 13px/28px "Helvetica Neue", sans-serif;color:#CCC;text-shadow:#444 0px -1px 0px;letter-spacing:normal;border:0;background-color:#464646;background-image:-ms-linear-gradient(bottom, #464646, #3f3f3f 5px);background-image:-moz-linear-gradient(bottom, #3f3f3f, #464646 5px);background-image:-o-linear-gradient(bottom, #464646, #3f3f3f 5px);background-image:-webkit-gradient(linear, left bottom, left top, from(#464646), to(#3f3f3f));background-image:-webkit-linear-gradient(bottom, #3f3f3f, #464646 5px);background-image:linear-gradient(bottom, #464646, #3f3f3f 5px);-webkit-box-shadow:0 -1px 5px rgba(0,0,0,0.20);-moz-box-shadow:0 -1px 5px rgba(0,0,0,0.20);-o-box-shadow:0 -1px 5px rgba(0,0,0,0.20);-ms-box-shadow:0 -1px 5px rgba(0,0,0,0.20);box-shadow:0 -1px 5px rgba(0,0,0,0.20);outline-style:none;outline-width:0;}#bit a.bsub{-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;-o-border-radius:2px 2px 0 0;-ms-border-radius:2px 2px 0 0;border-radius:2px 2px0 0 0;} #bit a:hover span, #bit a.bsub.open span{color:#ffffff !important;}#bit a.bsub.open{background:#333;}#bitsubscribe{background:#464646;color:#fff;padding:15px;width:200px;margin-top:27px;-moz-border-radius:2px 0 0 0;-webkit-border-radius:2px 0 0 0;-o-border-radius:2px 0 0 0;-ms-border-radius:2px 0 0 0;border-radius:2px 0 0 0;*float:right;*margin-right:-68px;}div#bitsubscribe.open{-webkit-box-shadow:0 0 8px rgba(0,0,0,0.5);-moz-box-shadow:0 0 8px rgba(0,0,0,0.5);-o-box-shadow:0 0 8px rgba(0,0,0,0.5);-ms-box-shadow:0 0 8px rgba(0,0,0,0.5);box-shadow:0 0 8px rgba(0,0,0,0.5);}#bitsubscribe div{overflow:hidden;}#bit h3, #bit #bitsubscribe h3, #bitsubscribe h3 label{margin:0 0 .5em 0 !important;font-family:"Helvetica Neue", Helvetica, Arial, sans-serif;font-weight:300;text-shadow:0 1px 0 #333;font-size:28px;color:#fff;text-align:left;}#bit #bitsubscribe p{margin:0 0 1em 0;*margin:0;font:15px/1.3em "Helvetica Neue", Helvetica, Arial, sans-serif;font-weight:300;text-shadow:0 1px 0 #333;color:#fff;}#bitsubscribe p a{margin:20px 0 0;color:#fff;text-decoration:underline;}#bit #bitsubscribe p.bit-follow-count{font-size:13px;} #bit #bitsubscribe p#bsub-subscribe-button, form#loggedout-follow {margin: 0;}#bitsubscribe input[type=submit]{padding:2px 20px;background:#333;background:-moz-linear-gradient(top, #333 0%, #111 100%);background:-webkit-gradient(linear, left top, left bottom, color-stop(0%,#333), color-stop(100%,#111));background:-webkit-linear-gradient(top, #333 0%,#111 100%);background:-o-linear-gradient(top, #333 0%,#111 100%);background:-ms-linear-gradient(top, #333 0%,#111 100%);background:linear-gradient(top, #333 0%,#111 100%);color:#ccc;text-shadow:0 1px 0 #000;border:1px solid #282828;-moz-border-radius:11px;-webkit-border-radius:11px;border-radius:11px;-moz-box-shadow:inset 0 1px 0 #444;-webkit-box-shadow:inset 0 1px 0 #444;box-shadow:inset 0 1px 0 #444;text-decoration:none;-webkit-transition:all 0.25s ease-in-out;-moz-transition:all 0.25s ease-in-out;-o-transition:all 0.25s ease-in-out;transition:all 0.25s ease-in-out;*margin:1em 0 1em 0;} #bitsubscribe input[type=submit]:hover{background:#222;background:-moz-linear-gradient(top, #333 0%, #222 100%);background:-webkit-gradient(linear, left top, left bottom, color-stop(0%,#333), color-stop(100%,#222));background:-webkit-linear-gradient(top, #333 0%,#222 100%);background:-o-linear-gradient(top, #333 0%,#222 100%);background:-ms-linear-gradient(top, #333 0%,#222 100%);background:linear-gradient(top, #333 0%,#222 100%);color:#fff;-moz-box-shadow:inset 0 1px 0 #4f4f4f;-webkit-box-shadow:inset 0 1px 0 #4f4f4f;box-shadow:inset 0 1px 0 #4f4f4f;text-decoration:none;}#bitsubscribe input[type=submit]:active{background:#111;background:-moz-linear-gradient(top, #111 0%, #222 100%);background:-webkit-gradient(linear, left top, left bottom, color-stop(0%,#111), color-stop(100%,#222));background:-webkit-linear-gradient(top, #111 0%,#222 100%);background:-o-linear-gradient(top, #111 0%,#222 100%);background:-ms-linear-gradient(top, #111 0%,#222 100%);background:linear-gradient(top, #111 0%,#222 100%);color:#aaa;-moz-box-shadow:inset 0 -1px 0 #333;-webkit-box-shadow:inset 0 -1px 0 #333;box-shadow:inset 0 -1px 0 #333;text-decoration:none;}#bitsubscribe input[type=text]{-moz-border-radius:3px;-webkit-border-radius:3px;-o-border-radius:3px;-ms-border-radius:3px;border-radius:3px;font:15px "Helvetica Neue", Helvetica, Arial, sans-serif;font-weight:300;}#bitsubscribe input[type=text]:focus{border:1px solid #000;}#bitsubscribe.open{display:block;}#bsub-subscribe-button{text-align:center;margin:0 auto;} #bsub-subscribe-button input {margin: 0; } #bitsubscribe #lof-readerpromo p{color:#ccc;}#bitsubscribe #lof-followpublicize{border-top:1px solid #3c3c3c;margin-bottom:.5em;}#bitsubscribe #lof-followpublicize h3{font-size:13px;padding-top:1em;margin-bottom:1em !important;}#bitsubscribe #lof-followpublicize p.lof-followpublicize-twitter, #bitsubscribe #lof-followpublicize p.lof-followpublicize-facebook{background:#555;-moz-border-radius:3px;-webkit-border-radius:3px;-o-border-radius:3px;-ms-border-radius:3px;border-radius:3px;-moz-box-shadow:inset 0 1px 1px #333;-webkit-box-shadow:inset 0 1px 1px #333;-o-box-shadow:inset 0 1px 1px #333;-ms-box-shadow:inset 0 1px 1px #333;box-shadow:inset 0 1px 1px #333;margin-bottom:.5em;overflow:hidden;}#bitsubscribe #lof-followpublicize p.lof-followpublicize-twitter{padding:10px 10px 5px;}#bitsubscribe #bsub-credit{text-align:center;font:normal 11px "Helvetica Neue", sans-serif;padding:7px 0;margin:0 0 -15px;border-top:1px solid #3c3c3c;}#bitsubscribe #bsub-credit a{color:#aaa;text-shadow:0 1px 0 #262626;background:none;text-decoration:none;}#bitsubscribe #bsub-credit a:hover{color:#fff;background:none;}
#bit a.bsub span{background:url('wordpress-plus.png') 0 1px no-repeat;padding-left:18px;}
</style>
<script type="text/javascript" charset="utf-8">jQuery.extend(jQuery.easing,{easeOutCubic:function(x, t, b, c, d){return c * ((t = t / d - 1) * t * t + 1) + b;}});jQuery(document).ready(function(){var isopen = false,bitHeight=jQuery('#bitsubscribe').height(); setTimeout(function(){jQuery('#bit').animate({bottom: '-' + bitHeight - 30 + 'px' }, 200); }, 300); jQuery('#bit a.bsub').click(function(){if(!isopen){isopen = true; jQuery('#bit a.bsub').addClass('open');jQuery('#bit #bitsubscribe').addClass('open'); jQuery('#bit').stop(); jQuery('#bit').animate({ bottom:'0px'},{duration: 400,easing:"easeOutCubic"});}else{isopen=false;jQuery('#bit').stop(); jQuery('#bit').animate({bottom: '-' + bitHeight - 30 + 'px'}, 200,function(){jQuery('#bit a.bsub').removeClass('open');jQuery('#bit #bitsubscribe').removeClass('open');});}});});</script>
<div id="bit" class=""><a class="bsub" href="javascript:void(0)">
<span id='bsub-text'>Sigueme</span></a>
<div id="bitsubscribe"><h3><label for="loggedout-follow-field">Siguenos!</label></h3>
<form action="[[A-TU-PAGINA-DE-WORDPRESS]]" method="post" accept-charset="utf-8" id="loggedout-follow">
<p>Recibe cada artículo nuevo de este blog en tu correo.</p>
<p class="bit-follow-count">Únete a otros <?php echo $wpdb->get_var("SELECT COUNT(id) FROM wp_subscribe2 WHERE active='1'"); ?> seguidores:</p><p><input type="text" name="email" id="s2email" style="width: 95%; padding: 1px 2px" value="Escribe tu email" onfocus='this.value=(this.value=="Escribe tu email") ? "" : this.value;' onblur='this.value=(this.value=="") ? "Escribe tu email" : this.value;' id="loggedout-follow-field"/></p><input type="hidden" name="ip" value="<?php echo $_SERVER['REMOTE_ADDR']; ?>">
<p id='bsub-subscribe-button'> <input type="submit" name="subscribe" value="Anotame!" /></p></form></div></div>
<?php } ?>

Desactivar para dispositivos móviles

Las primeras y la última línea del código detectan si el usuario está viendo la página desde un dispositivo móvil.
Algunos dispositivos móviles pueden tener problemas de mostrar esta ventana flotante. A veces, la ventana puede ser flotante en el centro de la pantalla del dispositivo sin devolverse a la parte inferior de la página. Por esta razón, es posible que quieras desactivar (o eliminar) esta opción si el usuario está utilizando un dispositivo móvil para leer tu blog. Puedes desactivarlo si el servidor web detecta que un móvil está solicitando la página web mediante con estos dos bloques de código.

Paso # 5:

Pruebalo!

Si estas leyendo este paso significa que ya terminaste tu propio botón Seguir!

¡Felicitaciones!

Pero lo último que queda por hacer, es probarlo. Una vez que hayas guardado el archivo con el código anterior, sólo actualiza cualquier página de tu blog. Deberías ver que aparece el botón Seguir en la esquina inferior derecha de tu blog. Si haces click en él, deberías ver el formulario de suscripción para tus lectores al sistema. Si agregas uno de tus correos electrónicos, y haces click en el botón de suscripción, debes redirigirte a la página de seguimiento. Por último, deberías recibir un email de confirmación que te pedirá que confirmes tu suscripción haciendo click en un enlace.
Si todos estos pasos funcionan correctamente significa que has terminado y estas listo para proporcionarle esta nueva funcionalidad a los lectores de tu blog!

Conclusión

Si tienes alguna pregunta acerca de este hack, no dudes en preguntar aquí, en la sección de comentarios de este post. Estaré encantado de responder a todas ellas.
Feliz Hackeo!

Recursos

Puedes descargar el wordpress-follow.zip para tener el icono de “+” y un ejemplo del footer.php.

Abajo esta el detalle de cada uno de los pedazos de código para los que quieran modificar mas a fondo esta funcionalidad.

<?php $useragent= $_SERVER['HTTP_USER_AGENT'];if(!preg_match('/android.+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i',$useragent)||preg_match('/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|e\-|e\/|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(di|rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|xda(\-|2|g)|yas\-|your|zeto|zte\-/i',substr($useragent,0,4))){?>
 #bit, #bit *{*zoom:1;} #bit { bottom: -300px; font: 13px "Helvetica Neue",sans-serif; position: fixed; right: 10px; z-index: 999999; } .loggedout-follow-shelf{position:fixed;right:40%;z-index:999999;bottom:-300px;}.loggedout-follow-normal{position:fixed;z-index:999999;bottom:-300px;right:10px;}.loggedout-follow-typekit{margin-right:4.5em;position:fixed;z-index:999999;bottom:-300px;right:10px;}#bit a.bsub{display:block;overflow:hidden;padding:0 10px 0 8px;float:right;text-decoration:none !important;line-height:28px;font:normal 13px/28px "Helvetica Neue", sans-serif;color:#CCC;text-shadow:#444 0px -1px 0px;letter-spacing:normal;border:0;background-color:#464646;background-image:-ms-linear-gradient(bottom, #464646, #3f3f3f 5px);background-image:-moz-linear-gradient(bottom, #3f3f3f, #464646 5px);background-image:-o-linear-gradient(bottom, #464646, #3f3f3f 5px);background-image:-webkit-gradient(linear, left bottom, left top, from(#464646), to(#3f3f3f));background-image:-webkit-linear-gradient(bottom, #3f3f3f, #464646 5px);background-image:linear-gradient(bottom, #464646, #3f3f3f 5px);-webkit-box-shadow:0 -1px 5px rgba(0,0,0,0.20);-moz-box-shadow:0 -1px 5px rgba(0,0,0,0.20);-o-box-shadow:0 -1px 5px rgba(0,0,0,0.20);-ms-box-shadow:0 -1px 5px rgba(0,0,0,0.20);box-shadow:0 -1px 5px rgba(0,0,0,0.20);outline-style:none;outline-width:0;}#bit a.bsub{-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;-o-border-radius:2px 2px 0 0;-ms-border-radius:2px 2px 0 0;border-radius:2px 2px0 0 0;} #bit a:hover span, #bit a.bsub.open span{color:#ffffff !important;}#bit a.bsub.open{background:#333;}#bitsubscribe{background:#464646;color:#fff;padding:15px;width:200px;margin-top:27px;-moz-border-radius:2px 0 0 0;-webkit-border-radius:2px 0 0 0;-o-border-radius:2px 0 0 0;-ms-border-radius:2px 0 0 0;border-radius:2px 0 0 0;*float:right;*margin-right:-68px;}div#bitsubscribe.open{-webkit-box-shadow:0 0 8px rgba(0,0,0,0.5);-moz-box-shadow:0 0 8px rgba(0,0,0,0.5);-o-box-shadow:0 0 8px rgba(0,0,0,0.5);-ms-box-shadow:0 0 8px rgba(0,0,0,0.5);box-shadow:0 0 8px rgba(0,0,0,0.5);}#bitsubscribe div{overflow:hidden;}#bit h3, #bit #bitsubscribe h3, #bitsubscribe h3 label{margin:0 0 .5em 0 !important;font-family:"Helvetica Neue", Helvetica, Arial, sans-serif;font-weight:300;text-shadow:0 1px 0 #333;font-size:28px;color:#fff;text-align:left;}#bit #bitsubscribe p{margin:0 0 1em 0;*margin:0;font:15px/1.3em "Helvetica Neue", Helvetica, Arial, sans-serif;font-weight:300;text-shadow:0 1px 0 #333;color:#fff;}#bitsubscribe p a{margin:20px 0 0;color:#fff;text-decoration:underline;}#bit #bitsubscribe p.bit-follow-count{font-size:13px;} #bit #bitsubscribe p#bsub-subscribe-button, form#loggedout-follow {margin: 0;}#bitsubscribe input[type=submit]{padding:2px 20px;background:#333;background:-moz-linear-gradient(top, #333 0%, #111 100%);background:-webkit-gradient(linear, left top, left bottom, color-stop(0%,#333), color-stop(100%,#111));background:-webkit-linear-gradient(top, #333 0%,#111 100%);background:-o-linear-gradient(top, #333 0%,#111 100%);background:-ms-linear-gradient(top, #333 0%,#111 100%);background:linear-gradient(top, #333 0%,#111 100%);color:#ccc;text-shadow:0 1px 0 #000;border:1px solid #282828;-moz-border-radius:11px;-webkit-border-radius:11px;border-radius:11px;-moz-box-shadow:inset 0 1px 0 #444;-webkit-box-shadow:inset 0 1px 0 #444;box-shadow:inset 0 1px 0 #444;text-decoration:none;-webkit-transition:all 0.25s ease-in-out;-moz-transition:all 0.25s ease-in-out;-o-transition:all 0.25s ease-in-out;transition:all 0.25s ease-in-out;*margin:1em 0 1em 0;} #bitsubscribe input[type=submit]:hover{background:#222;background:-moz-linear-gradient(top, #333 0%, #222 100%);background:-webkit-gradient(linear, left top, left bottom, color-stop(0%,#333), color-stop(100%,#222));background:-webkit-linear-gradient(top, #333 0%,#222 100%);background:-o-linear-gradient(top, #333 0%,#222 100%);background:-ms-linear-gradient(top, #333 0%,#222 100%);background:linear-gradient(top, #333 0%,#222 100%);color:#fff;-moz-box-shadow:inset 0 1px 0 #4f4f4f;-webkit-box-shadow:inset 0 1px 0 #4f4f4f;box-shadow:inset 0 1px 0 #4f4f4f;text-decoration:none;}#bitsubscribe input[type=submit]:active{background:#111;background:-moz-linear-gradient(top, #111 0%, #222 100%);background:-webkit-gradient(linear, left top, left bottom, color-stop(0%,#111), color-stop(100%,#222));background:-webkit-linear-gradient(top, #111 0%,#222 100%);background:-o-linear-gradient(top, #111 0%,#222 100%);background:-ms-linear-gradient(top, #111 0%,#222 100%);background:linear-gradient(top, #111 0%,#222 100%);color:#aaa;-moz-box-shadow:inset 0 -1px 0 #333;-webkit-box-shadow:inset 0 -1px 0 #333;box-shadow:inset 0 -1px 0 #333;text-decoration:none;}#bitsubscribe input[type=text]{-moz-border-radius:3px;-webkit-border-radius:3px;-o-border-radius:3px;-ms-border-radius:3px;border-radius:3px;font:15px "Helvetica Neue", Helvetica, Arial, sans-serif;font-weight:300;}#bitsubscribe input[type=text]:focus{border:1px solid #000;}#bitsubscribe.open{display:block;}#bsub-subscribe-button{text-align:center;margin:0 auto;} #bsub-subscribe-button input {margin: 0; } #bitsubscribe #lof-readerpromo p{color:#ccc;}#bitsubscribe #lof-followpublicize{border-top:1px solid #3c3c3c;margin-bottom:.5em;}#bitsubscribe #lof-followpublicize h3{font-size:13px;padding-top:1em;margin-bottom:1em !important;}#bitsubscribe #lof-followpublicize p.lof-followpublicize-twitter, #bitsubscribe #lof-followpublicize p.lof-followpublicize-facebook{background:#555;-moz-border-radius:3px;-webkit-border-radius:3px;-o-border-radius:3px;-ms-border-radius:3px;border-radius:3px;-moz-box-shadow:inset 0 1px 1px #333;-webkit-box-shadow:inset 0 1px 1px #333;-o-box-shadow:inset 0 1px 1px #333;-ms-box-shadow:inset 0 1px 1px #333;box-shadow:inset 0 1px 1px #333;margin-bottom:.5em;overflow:hidden;}#bitsubscribe #lof-followpublicize p.lof-followpublicize-twitter{padding:10px 10px 5px;}#bitsubscribe #bsub-credit{text-align:center;font:normal 11px "Helvetica Neue", sans-serif;padding:7px 0;margin:0 0 -15px;border-top:1px solid #3c3c3c;}#bitsubscribe #bsub-credit a{color:#aaa;text-shadow:0 1px 0 #262626;background:none;text-decoration:none;}#bitsubscribe #bsub-credit a:hover{color:#fff;background:none;}
#bit a.bsub span{background:url('wordpress-plus.png') 0 1px no-repeat;padding-left:18px;}
<script>
jQuery.extend(jQuery.easing, { easeOutCubic: function (x, t, b, c, d) { return c * ((t = t / d - 1) * t * t + 1) + b; } });
		jQuery(function () {
		 	var isopen = false, bitHeight = $('#bitsubscribe').height();
		 	setTimeout(function () { $('#bit').animate({bottom: '-' + bitHeight - 30 + 'px'}, 200);}, 300);
		$('#bit a.bsub').click(function () {
		 	if (!isopen) {
		 		isopen = true;
		 		$('#bit a.bsub').addClass('open');
		 		$('#bit #bitsubscribe').addClass('open')
		 		$('#bit').stop();
		 		$('#bit').animate({ bottom: '0px' }, { duration: 400, easing: "easeOutCubic" });
		 	} else {
		 		isopen = false;
		 		$('#bit').stop();
		 		$('#bit').animate({ bottom: '-' + bitHeight - 30 + 'px'}, 200, function () {
					$('#bit a.bsub').removeClass('open');
		 			$('#bit #bitsubscribe').removeClass('open'); });
		 		}
		 	});
		});
</script>
<div id="bit" class="">
		<a class="bsub" href="javascript:void(0)"><span id='bsub-text'>Sigueme</span></a>
		
		<div id="bitsubscribe">
			<h3><label for="loggedout-follow-field">Siguenos!</label></h3>
			<form action="[[A-TU-PAGINA-DE-WORDPRESS]]" method="post" accept-charset="utf-8" id="loggedout-follow">
				<p>Recibe cada artículo nuevo de este blog en tu correo.</p>
				<p class="bit-follow-count">Únete a otros <?php echo $wpdb->get_var("SELECT COUNT(id) FROM wp_subscribe2 WHERE active='1'"); ?> seguidores:</p>
				<p><input type="text" name="email" id="s2email" style="width: 95%; padding: 1px 2px" value="Escribe tu email" onfocus='this.value=(this.value=="Escribe tu email") ? "" : this.value;' onblur='this.value=(this.value=="") ? "Escribe tu email" : this.value;' id="loggedout-follow-field"/></p>
				<input type="hidden" name="ip" value="<?php echo $_SERVER['REMOTE_ADDR']; ?>">
				<p id='bsub-subscribe-button'> <input type="submit" name="subscribe" value="Anotame!" /></p>
			</form>	
		</div>
		
	</div>
<?php } ?>

Creditos

Este artículo fue traducido y parafraseado de este:
http://fgiasson.com/blog/index.php/2011/10/02/wordpresss-follow-button-for-non-wordpress-com-users/

Cómo quitar los datos de conexión de wordpress

conexion de ftp de wordpress
Datos de conexión de wordpress

Para que wordpress deje de pedir los datos de conexión al servidor para hacer actualizaciones tienes que darle los privilegios al usuario de la carpeta.

Datos de conexión
Para realizar la acción requerida WordPress necesita acceder a tu servidor web. Por favor, introduce tus datos de acceso FTP para proceder. Si no recuerdas tus datos de acceso deberías contactar con tu proveedor de alojamiento.

Para saber que usuario es el propietario puedes poner un php con este código en la carpeta de wordpress.

En mi ejemplo pongo en la carpeta /Library/WebServer/Documents/carpeta_wordpress un archivo whoami.php con este código:
<?php echo(exec("whoami")); ?>

En el explorador pongo http://carpeta-de-wordpress/whoami.php y me dice el nombre de propietario es: _www

Entonces hago lo siguiente:

  1. Abrir Terminal
  2. Ir a la carpeta padre de la instalación que quiero modificar.
    En mi instalación local es:
    cd /Library/WebServer/Documents
  3. Cambiar propietario de la carpeta
    sudo chown -R _www: carpeta_wordpress
  4. password del usuario root
  5. Listo!

_www es el usuario que obtuve de whoami.php
carpeta_wordpress es la carpeta que quieres modificar.

¿Por que sucede esto?

Cada vez que usas el panel de control de wordpress para instalar, actualizar o borrar plugins, temas o incluso el mismo wordpress para una nueva versión, este tiene que hacer cambios a carpetas en el sistema de archivos del servidor.

Antes de hacer esto, wordpress primero revisa si puede tener acceso directo a manipular estos archivos.

Si no tiene los permisos necesarios para modificar el sistema de archivos directamente, entonces pide las credenciales FTP para intentar hacer estas modificaciones por esta via.

¿Te funcionó? escribe en los comentarios.

 

Referencias:
http://www.chrisabernethy.com/why-wordpress-asks-connection-info/