Cuando desarrollamos un proyecto en WordPress sabemos que en algún momento nos vamos a ver en la necesidad de cambiar algún comportamiento del mismo. WordPress es un CMS muy potente, pero en algunos aspectos no se adapta al 100% de nuestras necesidades, siempre hay un aspecto en el que tenemos que añadir algo “a mano”, como se suele decir. Y es aquí donde el uso de funciones nos facilita la vida ?


Inconvenientes de uso de plugins en WordPress

Uno de los principales problemas que podemos encontrar a la hora de desarrollar un proyecto en WordPress es el abuso que se suele hacer de los plugins, existen infinidad de plugins, prácticamente para todo. Sin lugar a dudas muchas veces nos salvan la vida, pero… ¿a qué precio?

Imaginemos que tenemos un proyecto en Woocommerce en el cual queremos añadir en el listado de artículos si el artículo en sí está o no agotado, sin necesidad de entrar dentro del producto. Este comportamiento le facilita mucho la compra al usuario, ya que de un vistazo puede ver si el producto que desea está o no disponible. Existen plugins que realizan este tipo de comportamientos, simplemente hemos de instalar, activar y configurar. Hasta aquí todo bien, ya tenemos el problema solucionado, pero sin saberlo, hemos ampliado el número de tablas de la base de datos y hemos añadido nuevas instrucciones que se ejecutarán cuando un visitante entre a nuestra web.

Otro de los grandes inconvenientes del uso de plugins es la seguridad, es decir, hemos de estar pendientes a tenerlos actualizados ya que podemos ser víctimas de hackeos e intrusiones que nos pueden ocasionar problemas muy graves.

Os estaréis preguntando: ¿Ya Jose, pero bueno por un plugin no pasa nada? Pero en realidad sí que pasa, ya que vamos sumando y sumando plugins y al final podemos encontrarnos con un proyecto de más de 40 plugins. Lo ideal para que WordPress funcione correctamente es entre 20 y 25 plugins.


¿Hay más vida más allá de los plugins?

Por supuesto que sí, por ejemplo en el caso que os he comentado antes, sobre “Añadir el cartel de agotado en nuestra tienda online”, podemos solucionarlo sin necesidad de instalar ningún plugin o con una pequeña función podemos conseguir nuestro objetivo sin necesidad de ampliar la base de datos y ahorrando recursos y tiempos de espera innecesarios, aspectos que influyen negativamente a la hora de posicionar nuestro proyecto o simplemente que sea usable o que no tarde en cargar y que los usuarios abandonen nuestra página.

Quizás algunos de vosotros se estén rasgando las vestiduras pensando “oh Dios mío no, que vamos a hacer sin plugins…” ?

Lo primero que no cunda el pánico, si trabajamos bajo WordPress es inevitable usar plugins, simplemente vamos a intentar prescindir de aquellos que podemos implementar su misma función por otros medios ¿y qué medios son esos?: Funciones.


¿Qué son las funciones?

Las funciones son unas instrucciones de programación que modifican comportamientos de WordPress o del theme que tengamos instalado. Para ello hemos de colocarlas en el archivo functions.php de nuestro tema, ayudándonos de un editor de texto.

Vamos a explicar a continuación el funcionamiento de una función con un ejemplo práctico.


¿Cómo podemos añadir el cartel de “Producto agotado” en el listado de productos?

Copiando este código en nuestro archivo functions.php de nuestro theme activo añadiremos el título “Agotado” en el listado de productos.

[code]/*FUNCIÓN QUE AÑADE «AGOTADO» EN LOS PRODUCTOS DE WOOCOMMERCE DEBAJO DEL TÍTULO*/

/*Aparece agotado en los productos*/
add_action( ‘woocommerce_after_shop_loop_item_title’, ‘bbloomer_display_sold_out_loop_woocommerce’ );

function bbloomer_display_sold_out_loop_woocommerce() {
global $product;

if ( !$product->is_in_stock() ) {
echo ‘<span style=»color: #FF0047;»>’ . __( ‘Agotado’, ‘woocommerce’ ) . ‘</span><br>’;
}

}
[/code]

Funciones de utilidad WordPress, Génesis y Woocommerce
A continuación os dejo una serie de funciones muy interesantes que os pueden venir muy bien para vuestros proyectos:

Eliminar los títulos de nuestras páginas en WordPress manteniendo los títulos en las entradas:

[code]/*FUNCIÓN QUE ELIMINA LOS TÍTULOS DE TODAS LAS SECCIONERS MENOS LAS DE LAS ENTRADAS*/

add_action( ‘genesis_meta’, ‘reposition_entry_header_elements’ );
function reposition_entry_header_elements() {

if ( ! is_singular( ‘page’ ) && ! is_page_template() ) {

remove_action( ‘genesis_entry_header’, ‘genesis_entry_header_markup_open’, 5 );
remove_action( ‘genesis_entry_header’, ‘genesis_do_post_title’ );
remove_action( ‘genesis_entry_header’, ‘genesis_entry_header_markup_close’, 15 );

add_action( ‘genesis_after_header’, ‘genesis_entry_header_markup_open’, 11 );
add_action( ‘genesis_after_header’, ‘genesis_do_post_title’, 12 );
add_action( ‘genesis_after_header’, ‘genesis_entry_header_markup_close’, 13 );

}

}
[code]

Mostrar la imagen destacada en las entradas:
Muchas veces al insertar una imagen destacada no se muestra por defecto cuando visualizamos una entrada y como solución provisional la añadimos manualmente dentro del cuerpo de la entrada, con esta función ya la tendremos añadida por defecto.

[code]/* MOSTRAR IMAGEN PRINCIPAL DENTRO DE UNA ENTRADA */

add_action(‘genesis_before_entry_content’, ‘show_featured_image_before_content’, 10);

function show_featured_image_before_content() {
if (!is_singular(‘post’))
return;
the_post_thumbnail(‘full’);

}

[/code]

Mostrar tallas en el listado de productos:
Uno de los inconvenientes de Woocommerce es que para saber el número de tallas disponibles de cada producto hemos de pinchar y ver su ficha individual, con esta función ya tendremos el listado de tallas justo debajo del nombre del mismo, sin necesidad de pinchar en su ficha.

[code]/*MOSTRAR TALLAS EN LISTADO DE PRODUCTOS*/

add_action( ‘woocommerce_shop_loop_item_title’, ‘wc_show_attribute_links’ );

function wc_show_attribute_links() {
global $post;

echo «<span style=’font-size:13px;’>Tallas disponibles</span><br>»;

$attribute_names = array( ‘pa_nombre_de_atributo’)// Añadir el nombre del atributo al array con el prefijo pa_
foreach ( $attribute_names as $attribute_name ) {
$taxonomy = get_taxonomy( $attribute_name );

if ( $taxonomy && ! is_wp_error( $taxonomy ) ) {
$terms = wp_get_post_terms( $post->ID, $attribute_name );
$terms_array = array();

if ( ! empty( $terms ) ) {
foreach ( $terms as $term ) {
$archive_link = get_term_link( $term->slug, $attribute_name );
$url = get_permalink( $item[‘product_id’] ) ;

$full_line = ‘<a href=»‘ . $url . ‘» style=»background-color: #fbf9ec; border-color: #000; padding-top: 5px; padding-bottom: 5px; padding-left: 2px; padding-right: 2px; border-width: 1px; border-style: solid; border-color: #a7a6a2; margin-right:0px; font-size:12px;»>’. $term->name . ‘</a>’;

array_push( $terms_array, $full_line );

}

echo implode( $terms_array, ‘ ‘ );

}

}

}

}

[/code]

Como podéis ver el uso de funciones nos ayuda bastante a que nuestros proyectos sean ágiles, seguros y que no tengan que depender tanto de plugins. Espero que os haya parecido muy interesante el artículo de hoy, dentro de poco iremos publicando más funciones de utilidad para vuestros proyectos.

¡Hasta la semana que viene!

2 comentarios

  1. Buenas tardes, he visto tu blog por casualidad despues de visitar una infinidad de web y blog buscando la solución a lo que necesito y no encuentro ningun plugins, configuracion css..etc que me de solución a lo que necesito y por casualidad he visto la funcion Mostrar tallas en el listado de productos que se parece más o menos a lo que necesito; me gustaria que aparecieran las tallas agotadas en otro color ya que tengo la posibilidad de sucribirse cuando vuelva a estar disponible. Lo he probado en mi web y no va. Te agredecería si me pudieras hechar una mano.
    Te detallo lo que tengo:
    woocommerce con un tema hijo.
    Gracias

    1. Hola Luciano,

      Acabamos de ver la consulta que nos hiciste, parece ser que estaba en SPAM y cómo también hicimos cambio de web y ahora seguimos aún con los retoques pues ni nos dimos cuenta. Te pido disculpas y aprovechar para saber si conseguiste resolverlo o aún estás buscando soluciones.

      Gracias por todo y una vez más mis disculpas.

Deja una respuesta