Ciber Geek > Wordpress

Wordpress

Un breve resumen del mercado de plantillas de WordPress de ThemeForest

Nota: A lo largo del post las palabras theme y plantilla se usan como sinónimos.

Hacer plantillas para WordPress puede ser un negocio lucrativo ya que el CMS, aunque tenga sus críticos, se está estableciendo casi como un estándar, en gran parte debido a su facilidad de uso y a su panel de administración que es muy amigable con los usuarios. Otro de los motivos es la gran cantidad de plantillas y plugins, y no me estoy refiriendo solo a los pagos, sino que la calidad de los themes y plugins gratis es también excelente.

Una radiografía de ThemeForest

Para investigar un poco el mercado de las plantillas premium para WordPress decidí ver un poco los números de ThemeForest, por lo que recolecte información sobre los temas ahí disponibles. Los datos fueron obtenidos el día 14 de marzo de 2015 desde la siguiente URL: themeforest.net/category/wordpress

En total obtuve 1800 plantillas existentes para WordPress en la tienda en cuestión, que sumaban un total de 470766 ventas, y considerando el precio actual de cada plantilla, sumaban un total de U$S 24673886, sí, esos son 24 millones de dólares.

Los precios de las plantillas oscilan entre los 33 y los 63 dólares. con un promedio de 49,92 para cada plantilla, y una moda de 58 dólares.

La cantidad de ventas varia bastante, al momento del relevamiento había 14 plantillas sin ventas, pero hay que considerar que éste dato tiene mas valor si se relaciona la cantidad de ventas con el tiempo que lleva disponible en la tienda una plantilla, algo que queda para un próximo artículo mas profundo, después de todo esto era una radiografía, no un análisis de sangre.

El promedio de ventas de una plantilla es de 261.53, con el mínimo en 0 (cero) y el máximo en 8545, que se corresponde al theme llamado BeTheme, el cual está en la tienda desde el 21 de mayo de 2014.

Un intento de infografía.

wordpress themeforest

Me da vergüenza llamarle infografía a esta “cosa”

Los números de las 10 plantillas de WordPress más vendidas *

* Según los datos de ThemeForest.

Esta es la parte BuzzFeed del post (?), resulta que los 10 temas más vendidos son los siguientes:

  1. BeTheme – Responsive Multi-Purpose WordPress Theme
  2. Story – Creative Responsive Multi-Purpose Theme
  3. Stockholm – A Genuinely Multi-Concept Theme
  4. Hemlock – A Responsive WordPress Blog Theme
  5. ROSA – An Exquisite Restaurant WordPress Theme
  6. SEO WP – Social Media and Digital Marketing Agency
  7. Hazel – Multi-Concept Creative WordPress Theme
  8. BuzzBlog – Clean & Personal WordPress Blog Theme
  9. BuildPress – Construction Business WP Theme
  10. Lobo – Portfolio for Freelancers & Agencies

Ojo, este ranking está basado solo en numero de ventas, por lo que se ven favorecidos los que llevan mas tiempo en ThemeForest. Si tomamos estas 10 plantillas y las reordenamos por la cantidad de ventas por día, se obtiene la siguiente lista.

  1. Stockholm – A Genuinely Multi-Concept Theme
  2. BeTheme – Responsive Multi-Purpose WordPress Theme
  3. BuildPress – Construction Business WP Theme
  4. Story – Creative Responsive Multi-Purpose Theme
  5. Hemlock – A Responsive WordPress Blog Theme
  6. SEO WP – Social Media and Digital Marketing Agency
  7. Hazel – Multi-Concept Creative WordPress Theme
  8. ROSA – An Exquisite Restaurant WordPress Theme
  9. BuzzBlog – Clean & Personal WordPress Blog Theme
  10. Lobo – Portfolio for Freelancers & Agencies

Las 10 plantillas mas vendidas suman un total de 42910 ventas, lo que significa un 9,11% del total de ventas. Y en cuanto a dinero suman U$2332390, equivalente al 9,45% del total de ventas en dinero.

Por último, un poco de datos duros.

En el próximo articulo voy a intentar profundizar un poco más en estos datos, y acepto sugerencias de otras tiendas de las cuales obtener información.

2 formas poco ortodoxas de cambiar la contraseña de WordPress

Si pueden hacer mediante la función de recordar contraseña, listo, no busquen mas, utilicen esa opcion. El tema es que a veces no se puede, tal vez hay algo mal configurado, o no queremos que el cliente se entere, por lo que enviarle un mail no es una opción (no sean boludos y envíenselo igual).

Restaurar la contraseña de WordPress con acceso mediante FTP

Para cambiar la contraseña si tienen acceso mediante FTP, o como sea que tengan acceso al archivo “functions.php” de la plantilla que están utilizando, pueden añadir el siguiente código para realizar el cambio de contraseña.

if($_GET['parametroprivado']){
var_dump(get_users(array( 'fields' => array( 'display_name', 'ID'))));
}

if($_GET['nuevapassword'] && $_GET['idusuario']){
wp_set_password( $_GET['nuevapassword'], $_GET['idusuario'] );
}

¿Qué te fumaste, pibe? ¡Nada, lo juro! Ahora les explico el porque de esos parámetros locos, como pista les cuento que es pura paranoia.

La idea del script anterior es la siguiente, al añadir esas lineas dentro de las etiquetas <?php ?> en su archivo “functions.php”, lo que hace es mostrar los usuarios y sus respectivas IDs, pero solamente si la URL tiene el parámetro “parametroprivado“, de otro modo estarían largando cosas al mundo exterior, y si bien no representa un problema de seguridad tan grave, al menos no en éste caso que solo estamos mostrando la ID y el nombre de usuario, si puede resultar feo para los usuarios que van a cargar una pagina y se van a encontrar con un pedazo de código PHP listando sus usuarios.

¿Para que necesito la ID y el nombre de usuario?

La ID es porque la necesitan pasar como parámetro en el paso 2, y el nombre es para saber que ID se corresponde con cada usuario.

Para ver el listado su URL deberia quedar mas o menos así.

http://susitio.com/?parametroprivado=1

Cambiar la contraseña

Supongamos que hicieron el paso anterior y ya vieron cual era la ID del usuario al que le quieren cambiar o poner una nueva contraseña (sé que alguien puede haber borrado sin querer un campo en la base de datos).

Ahora para realizar el cambio van a tener que acceder a la siguiente URL, y añadir como parametros la ID del usuario y la nueva contraseña.

http://susitio.com/?nuevapassword=123456&idusuario=2

Donde nuevapassword es la nueva contraseña, e idusuario es la ID que vieron anteriormente.

Y bueno, después de que cargue dicha URL la contraseña se va a ser la que pasaron como parámetro.

Restaurar la contraseña de WordPress con acceso la base de datos

La otra forma es hacerlo mediante la base de datos, por ejemplo con PHPMyAdmin pueden acceder a la base de datos donde está instalado WordPress, ir a la tabla “wp_users” y buscar el campo “user_pass” del usuario al que le quieren modificar la contraseña, en dicho campo deben ingresar el hash MD5 de la contraseña, para hacerlo pueden usar alguno de los servicios para generar estos hashes.

Así se vería la tabla luego de que le ingresan la contraseña hasheada, específicamente el campo “user_pass” es el que tiene esos “códigos raros”.

wodpress contraseña md5

MD5 “común”

Un detalle es que WordPress soporta MD5 por cuestiones de retrocompatibilidad, pero cuando detecta que una contraseña esta hasheada utilizando este algoritmo, la “re-hashea” utilizando algo un poco mas robusto, por lo que si luego de iniciar sesión vuelven a ingresar, van a ver que el valor en el campo “user_pass” cambió.

wordpress contraseña hash

Contraseña “re-hasheada” por WordPress

Magia, si tienen consultas dejen un comentario e intentaré ayudarlos.

 

Forbidden Filename “shell.php”

¿Qué estás pasando?

El error 550 Forbidden Filename, básicamente tu hosting tiene entre sus políticas de nombres no aceptados en el FTP a “shell”, no es algo del todo raro, pero si es algo molesto cuando sucede. Un ejemplo es en la versión 4.0 de WordPress, en donde existe un archivo con ése nombre en “wp-includes\Text\Diff\Engine“.

¿Y ahora que hago?

Hay 2 alternativas, la primera es quejarse, si! A tu empresa de hosting, contactense y expliquen la situación, lo mas común es que no tengan problemas en modificar la configuración para que subir éste archivo no sea un problema.

La otra opción, para quienes extrañan a MacGyver es renombrar el archivo, luego subirlo adonde corresponde y en esa misma carpeta subir un archivo con el siguiente código:


<?php rename('nombre_actual.php', 'shell.php'); ?>

Por ultimo queda ingresar la URL en la cual quedó el archivo que crearon, en el navegador, y con ésto se acaba el sufrimiento.

Dependiendo de la configuración de su hosting en algunos casos se puede renombrar el archivo desde el cliente FTP.

ORDER BY avanzado para loops con WordPress (usando WP_Query)

Todo en WordPress es sencillo, hasta que empezamos a hacer cosas mas especificas, y no es porque no tengamos las herramientas para hacerlo, sino porque muchas veces no las conocemos y terminamos escribiendo algún código ninja para salir del paso, y no digo que esté mal, pero en incontables ocasiones terminamos reinventando la rueda, y no de la mejor manera.

reinventar la rueda

Reinventando la rueda

Uno de éstos casos es cuando usamos la clase WP_Query para crear loops customizados, o como deseen llamarlos. En ésta ocasión la idea es ahondar sobre el orden de los posts que se obtienen en el Loop.

WP_Query orderby

En éste ejemplo usamos el parámetro ORDER BY, y elegimos los parámetros “author” y “title”, o sea, ordenamos primero por autor, y si hay 2 posts que tienen el mismo autor, entonces el titulo es el que “decide” el orden.

$args = array( 'orderby' => 'author title', 'order' => 'DESC' );

$query = new WP_Query($args);

El resultado de ésta query es el siguiente:

SELECT SQL_CALC_FOUND_ROWS  wp_posts.ID FROM wp_posts  WHERE 1=1  AND wp_posts.post_type = 'post' AND (wp_posts.post_status = 'publish')  ORDER BY wp_posts.post_author,wp_posts.post_title DESC LIMIT 0, 10

Como ven, en la query generada vemos que se utilizan las columnas “post_author” y “post_title” en el ORDER BY, ésto tiene algunas limitaciones, como por ejemplo, que no se puede ordenar en forma ascendente en una columna y descendente en la otra.

Además, existen casos en lo que se requiere ordenar por día y por otra columna, por autor, por dar un ejemplo, en ése caso hay un problema, si usamos el “orderby” con el parámetro “date”, el segundo parámetro no tendría sentido (en la mayoría de los casos), ya que el parámetro “date” se corresponde con la fecha del post, que tiene incluido la hora, minutos y segundos, por lo tanto es raro que 2 posts tengan la misma fecha, aunque hay casos en los que sí, como cuando los posts fueron migrados a WordPress y los datos de la fecha estaban incompletos.

Filtro posts_orderby

Con el filtro “posts_orderby” lo que se logra es modificar la parte del ORDER_BY de la query que genera WP_Query, su uso es muy sencillo.

add_filter('posts_orderby', 'posts_orderby');

function posts_orderby($orderby_for_query) {
$orderby_for_query = "LEFT(wp_posts.post_date, 10) DESC, wp_posts.post_title ASC";
return $orderby_for_query;
}

$args = ' ';
$the_query = new WP_Query($args);
var_dump($the_query->request);

El resultado del “var_dump” es el siguiente.

SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts WHERE 1=1 AND wp_posts.post_type = 'post' AND (wp_posts.post_status = 'publish') ORDER BY LEFT(wp_posts.post_date, 10) DESC, wp_posts.post_title ASC LIMIT 0, 10

Como ven, el filtro modificó la parte del ORDER_BY con lo que añadimos en la funcion “posts_orderby”. La función LEFT, es una función de MySQL, lo que hace es obtener una subcadena de una cadena, en éste caso la idea es reducir la columna “post_date” para obtener solo la parte del año, mes y día, de ésa forma se logra orden por día, y por el otro atributo que se desee.

Si tienen varias queries, pueden “remover el filtro”, para evitar que afecte a otros loops.

remove_filter( 'posts_orderby', 'posts_orderby' );

Lo ideal, es llamar a ésta función después de crear la query.

Como aclaración, ésto también funciona en las queries por defecto de WordPress (en las que no es necesario crear una instancia de WP_Query).

Acceder a WordPress en una red local

Con la llegada del responsive design, y todos los nombres cool que tienen las paginas que se adaptan a diferentes tamaños de pantallas, es recurrente la necesidad de probar éstas paginas en diferentes dispositivos, para lo cual, entre varias técnicas, una de mis favoritas (?) es acceder al servidor en la PC en que estamos desarrollando mediante otros dispositivos, todos conectados a una red local. Ojo, ésto no funciona si están usando el 3G de su teléfono, tienen que estar en al misma red por cuestiones de simplicidad, o sea usar el WiFi, si se quieren poner a jugar con las configuraciones avanzadas de su router, bueno, pueden hacerlo.

wordpress logo

WordPress

Acceder a una instalación de WordPress en la red local

Antes de hacerlo deben configurar el servidor (para Apache), de modo que les quede así la directiva Listen.

Listen *:80

Ésto puede llegar a variar, pero él anterior es el caso mas común.

También deben fijarse de que el Firewall no les esté filtrando el acceso.

Y aquí, la magia, deben agregar lo siguiente al archivo wp-config.php.

define( ‘WP_SITEURL’, ‘http://’ . $_SERVER[‘HTTP_HOST’] . ‘/directorio_donde_esta_wordpress’ );
define(‘WP_HOME’, WP_SITEURL);

Es pura magia, traída a ustedes gracias a las constantes WP_SITEURL y WP_HOME. Antes de hacer ésto, si podían acceder a su blog/sitio de WordPress, varias cosas no iban a funcionar, como por ejemplo la hoja de estilos y demás, tengan en cuenta que es fundamental utilizar las funciones de WordPress para definir rutas, si están hardcodeadas o escritas a mano, ésto no va a funcionar.

Ésta modificación al archivo wp-config.php lo que hace es modificar el valor sin interferir con el valor que está guardado en la base de datos, así que después es solo cuestión de borrar éstas lineas de código y listo.

Pagina 2 de 812345678