Ciber Geek > Wordpress

Wordpress

Plantillas populares en ThemeForest

Hace unos días había publicado un articulo con un breve resumen del mercado de plantillas de WordPress en ThemeForest, básicamente en esa primera entrega el tema era la cantidad de ventas y las plantillas más vendidas ordenadas por el total de ventas, sin tener en cuenta la relación ventas/días en la tienda.

En esta ocasión voy a publicar el listado de ventas ordenado por el “Indice de ventas”, que es como decidí llamar a la relación que existe entre la cantidad de ventas y los días que una plantilla lleva en la tienda desde su fecha de publicación, lo cual en definitiva marca la cantidad de ventas por día que tiene el theme o plantilla. La diferencia con las ventas totales se da en el hecho de que el ordenamiento por dicha cantidad no contempla el tiempo que llevó alcanzar ese número.

Las 10 plantillas con la mayor cantidad de ventas por día al momento del revelamiento eran:

  1. Rosemary – A Responsive WordPress Blog Theme
  2. Stockholm – A Genuinely Multi-Concept Theme
  3. BeTheme – Responsive Multi-Purpose WordPress Theme
  4. Blogging – Beautiful & Responsive WordPress Theme
  5. BuildPress – Construction Business WP Theme
  6. Story – Creative Responsive Multi-Purpose Theme
  7. Cabin – A Beautiful Vintage-Inspired Theme
  8. Listify – WordPress Directory Theme
  9. Newsmag – News Magazine Newspaper
  10. Construction – WP Construction, Building Business

Hay que considerar varios factores, por ejemplo la plantilla Rosemary es la primera en cuanto a ventas por día, pero su precio es de U$38, apenas 5 dólares por encima del precio mínimo de la tienda que es de U$33.

Además, otro factor es que muchas veces se hacen preguntas antes de comprar una plantilla, por lo que si se trata de una plantilla que fue publicada hace poco tiempo es probable de que haya nuevas preguntas que puedan hacer que posibles compradores tarden en decidirse hasta que sus interrogantes no sean respondidos.

Precios como incentivo para aumentar las ventas

Algo a tener en cuenta es que los precios los pone el “equipo” de ThemeForest dependiendo de las características de las plantillas y es un proceso con un alto grado de subjetividad, algo que me resultó interesante, ya que antes de conocer esto pensaba que una buena estrategia para posicionar una plantilla en el mercado era comenzar a venderla barata y luego de que esté establecida subir un poco el precio. Ojo, esto no quiere decir que esto no suceda, pero aparentemente es un proceso automático en el cual el precio es modificado por un algoritmo que controla la variación en la cantidad de ventas respecto al precio, algo que no es para nada nuevo y es utilizado comúnmente en ecommerce.

Listado completo de plantilla de Themeforest ordenado por ventas por día

Acceder a los datos en Google Docs.

 

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).

Pagina 2 de 812345678