ThemeForest ha actualizado recientemente sus requisitos de presentación de temas de WordPress para que sean más estrictos y se ajusten más a las mejores prácticas de desarrollo de temas de WordPress.
Las directrices requieren el uso de varias de las características principales de WordPress, ganchos de tema estándar, y no permiten funciones PHP (como base64 y fopen) que realmente no deberían haber tenido ningún lugar en un tema de WordPress para empezar.
Básicamente, más o menos la política de revisión de temas de WordPress.org, más o menos algunas cosas.
En general, es un paso en la dirección correcta y se mueve para promover las mejores prácticas en uno de los mercados de temas de WordPress más populares de la red. Sólo hay un problema…
Shortcodes admisibles
Una cosa que me llamó particularmente la atención, sin embargo, fue cómo se permitían ciertas funcionalidades de shortcodes “ admisibles” (es decir, incluyéndolos directamente a través del archivo functions.
php del tema). Entre los que aparecían como “admisibles” estaban los siguientes:
- botones
- tablas de precios
- contenedores de imágenes
- tapas desplegables
- listas
Los shortcodes inadmisibles incluyen: mapas, acordeones y toggles, contenidos en caja, columna, formularios de contacto, gráficos.
El problema de los códigos cortos en los temas
Realmente no puedo expresarlo mejor de lo que ya lo ha hecho Justin Tadlock. Uno de los problemas más notables, es que cuando un usuario cambia de tema, los códigos cortos ya no serán analizados.
Digamos que el tema "Super Awesome" tiene un shortcode que muestra un gran botón verde con un enlace cuando escribes algo como [button url="http://example.com"]Gran Botón Verde[/button]
.
Cuando cambias a otro tema (seamos realistas, la gente se aburre de los temas con facilidad), ya no hay un gran botón verde. En su lugar, verás el shortcode sin analizar en el post como si fuera cualquier otra pieza de contenido, así:
[button url=”http://example.com”]Gran botón verde[/button]
Se ve feo, confuso y fuera de lugar, y es un dolor para el usuario volver atrás y eliminar / reemplazar todos ellos.
El otro problema con los códigos cortos en los temas
Algo que Tadlock trató en su artículo “Dealing with shortcode madness” es que muchos shortcodes son tan simples y similares al HTML, que incluso sería mejor instruir a los usuarios para que escriban un poco (*gasp*) de código HTML real.
El mismo [button url="http://example.com"]Texto del botón[/button
] shortcode en mi ejemplo anterior podría ser fácilmente reescrito como algo como:
<a href="http://example.com" class="button">Texto del botón aquí</a>
Aunque puede que no haya código CSS que estilice el selector .
button en un tema nuevo, al menos aparecerá un enlace normal. Lo cual es una gran mejora con respecto a un shortcode [button
] sin analizar que aparece en el contenido de una entrada.
Además, creo que todos los usuarios de WordPress deberían tener al menos unos conocimientos básicos de código HTML. Enseñarles, aunque sea en pequeñas partes (como la construcción de un enlace), les ayudará. Si pueden entender un shortcode, no hará falta mucho más para que entiendan HTML básico.
¡Pero a los usuarios no les importa!
Un argumento común que veo defendiendo todo tipo de malas prácticas cuando se trata del desarrollo de temas es que a los usuarios simplemente no les importa. Quiero decir, tal vez nunca quieren actualizar su tema, en cuyo caso, esta cuestión shortcode sería un punto discutible.
El problema es que algunos usuarios inevitablemente querrán cambiar de tema algún día. Algunos usuarios querrán instalar un plugin que podría entrar en conflicto con algún otro código mal pensado en un tema.
Entonces, probablemente se preocuparán, y probablemente se preguntarán si el tema que compraron con cientos de shortcodes incorporados y otras características superfluas realmente valía la pena.
La forma correcta de incluir shortcodes
Ponlo en un plugin. Un plugin realmente sencillo. No necesita un panel de opciones separado. Sólo copia y pega literalmente lo que ibas a incluir a través del archivo functions.php de tu tema, y ponlo en un plugin en su lugar.
Incluso podría ser incluido con algo como TGM Plugin Activation para que sea necesario en la activación del tema. O no. Un tema sigue siendo un tema sin shortcodes.
De esta manera, si el usuario cambia de tema, los shortcodes seguirán funcionando, porque esa funcionalidad es manejada por el plugin que sigue activo.
Quizás el plugin también podría poner en cola estilos para los shortcodes. De esta manera, los grandes botones verdes que incluyó con el código corto [button] seguirán siendo grandes botones verdes, independientemente del tema utilizado.
¿Por qué ThemeForest permite shortcodes “Admisibles”?
Es difícil decir cuál fue exactamente el razonamiento detrás de esta decisión. Japh Thomson, un evangelista de WordPress en Envato (empresa matriz de ThemeForest) dijo lo siguiente al respecto en un comentario en WPMU.org:
La funcionalidad compleja de los shortcodes debería residir en un plugin, no en un tema. También tiene sentido si tenemos en cuenta que la mayoría de nuestros autores tienen varios temas.
Obviamente, él lo entiende. Así que es un misterio para mí por qué habría ningún shortcode “admisible ” en absoluto. Y sí, me doy cuenta de que utilizó la palabra “complejo” en la cita anterior, y los códigos cortos admisibles tienden a ser bastante simples (dropcaps, listas, etc.).
Por muy simple que sea un shortcode, los problemas que he descrito anteriormente seguirán existiendo. ThemeForest ha demostrado ser sensible a los comentarios de la comunidad, por lo que es posible que esta regla se modifique en el futuro.
Conclusión
Me doy cuenta de que este post parece un poco puntilloso, y estas nuevas directrices son definitivamente un gran paso en la dirección correcta. Pero realmente no hay ninguna razón por la que cualquier shortcode debería estar permitido en un tema, simple o no.
¿Se te ocurre alguna situación en la que un tema publicado deba incluir la funcionalidad de shortcode a través de su propio functions.php?
– Theme Lab (@themelab) 9 de julio de 2013
Spoiler alert: No recibí ninguna respuesta a ese tweet con un ejemplo real de un shortcode absolutamente necesario de ser incluido en un tema lanzado públicamente.
Eso es porque simplemente no es fácil para un usuario volver atrás y reemplazar cientos de códigos cortos de botón después de que cambiaron a un tema que no tiene exactamente el mismo soporte de código corto.
Thanks so much for this post, I have just purchased a ThemeForest theme and I am having this same problem! When we uploaded theme, the pages say the shortcode is not compatible … what to do now to make it compatible? Thanks!
While I agree shortcodes should reside within a plugin instead of a theme, the unparsed code will still appear when the plugin is disabled or replaced by another shortcode plugin. Either way it can be a hassle for the person performing the changeover.
Learning basic HTML seems best.
Totally agree on this. Themes should handle layout and styles. Anything that adds some extra features must go in a plugin.
I have the same stance on shortcodes, but can see the reasoning for some themes including them for non tech savy users to add features easily and in turn helps sell more of developers themes.
here here.
It would also be nice if there was some sort of elegant degradation for shortcodes that are no longer active.
Thus, possible problems can be avoided with functions which may be added in the future in different theme. Issues of maintenance are important purchasing arguments – at least for me!
I completely agree with you. Very few people stick with one theme forever, unless it’s completely custom (and then you don’t have the themeforest problem) and shortcodes are a pain to deal with. I recently discovered this problem when I started changing from a theme-junkie theme to a studiopress/genesis theme. Now I’ve put the change on hold, despite spending $80 on it already, because there is too much to change even on my new site.
Hey Leland, great post, thanks for your thoughts!
We’ll be releasing an update to these requirements shortly, based on feedback from our authors, and I hope you’ll be pleased with some of the adjustments we’ve made (specifically in relation to shortcodes) 🙂
I think it’s not only a compatibility issue with other themes, but a content-related issue too. A shortcode should be just a helper to process content, and themes should only display pre-processed content, not process the content by themselves. When themes process shortcodes on their own, they’re treating that piece of text (or at least it looks like the developer does it) as a call to a visual element, not to a functional one (what it really is), like if the scope of what a theme is for was missing there. That practice shows a lack of clarity about what content, functionality and visualization are, and how those elements should be managed (i.e., content should be stored into DB, functionality should be managed via WP core and plugins, and visualization via themes; just as a very basic example). There’s no need to be a content expert, an experienced programmer or a great designer to know such things, just a little bit of attention and careful thought on what we’re offering to our users, and how easy or difficult will be for them to use our products. I think it’s OK if you don’t know the differences but you’re open to learn and improve, but, on the other hand, to know and have in mind all these things and offer shortcodes (and any other functionality-related stuff) in themes anyway, that seems to me like a disloyal practice that makes your users captives of your product. I know that sometimes the line between visualization and functionality is really thin, but in most cases the difference is non-discussable.
Shorry for the long reply, this is a topic that I’m really interested in. Great post 🙂
Hey Andrés, no need to apologize for the lengthy reply, you make some great points!
Thanks for this… I have ongoing issues with shortcodes in themes that I have bought. And when I retheme them, I have legacy code everwhere which needs replacing.
Peter, that’s a perfect example of the problem with shortcode in themes.
It gets even worse when other non-presentational functionality is also included in a theme, maybe something to talk about in a future post.