Código
add_action( 'woocommerce_before_single_product', 'dl_comprimir_descripcion_corta_productos' );<div class="bsm-slider-outer">
<div class="bsm-slider"
id="bsm_b604a075"
style="border-radius:10px"
data-total="3"
data-autoplay="true"
data-interval="10000"
data-pause="true">
<div class="bsm-track">
<div class="bsm-slide" style="border-radius:10px">
<div class="bsm-slide__img-wrap">
<a href="https://ariapsa.com/diseno-de-paginas-web/" target="_blank" rel="noopener" class="bsm-slide__img-link">
<img src="https://ariapsa.com/wp-content/uploads/2026/08/ads-diseno-de-disitios-web-rotativo-01.jpg"
alt="Diseño de sitios y páginas web"
class="bsm-slide__img"
loading="lazy" width="350" height="190">
</a>
</div>
<div class="bsm-slide__body">
<h2 class="bsm-slide__title">Diseño de sitios y páginas web</h2> <p class="bsm-slide__desc">Desde landing page hasta tiendas online, incluye dominio y hosting <a href="https://ariapsa.com/diseno-de-paginas-web/" target="_blank" rel="noopener"
class="bsm-slide__btn"
style="background-color:#ca0771 !important;color:#ffffff !important;display:inline-block !important;padding:9px 20px !important;border-radius:5px !important;text-decoration:none !important;font-weight:700 !important;">
Ver planes y precios </a>
</div>
</div>
<div class="bsm-slide" style="border-radius:10px">
<div class="bsm-slide__img-wrap">
<a href="https://ariapsa.com/mkt" target="_blank" rel="noopener" class="bsm-slide__img-link">
<img src="https://ariapsa.com/wp-content/uploads/2026/08/ads-banner-rotativo-marketing-digital-ariapsa.jpg"
alt="¿Necesitas marketing digital para tu negocio?"
class="bsm-slide__img"
loading="lazy" width="350" height="190">
</a>
</div>
<div class="bsm-slide__body">
<h2 class="bsm-slide__title">¿Necesitas marketing digital para tu negocio?</h2> <p class="bsm-slide__desc">Planes desde posicionamiento SEO, redes sociales, Google y ChatGPT ADS. <a href="https://ariapsa.com/mkt" target="_blank" rel="noopener"
class="bsm-slide__btn"
style="background-color:#c70a78 !important;color:#ffffff !important;display:inline-block !important;padding:9px 20px !important;border-radius:5px !important;text-decoration:none !important;font-weight:700 !important;">
Ver planes </a>
</div>
</div>
<div class="bsm-slide" style="border-radius:10px">
<div class="bsm-slide__img-wrap">
<a href="https://ariapsa.com/dossier" target="_blank" rel="noopener" class="bsm-slide__img-link">
<img src="https://ariapsa.com/wp-content/uploads/2026/08/ads-diseno-de-dossier.jpg"
alt="Dossier de ventas"
class="bsm-slide__img"
loading="lazy" width="350" height="190">
</a>
</div>
<div class="bsm-slide__body">
<h2 class="bsm-slide__title">Dossier de ventas</h2> <p class="bsm-slide__desc">Convertimos tu presentación PPT en una herramienta de prospección optimizada para móviles. <a href="https://ariapsa.com/dossier" target="_blank" rel="noopener"
class="bsm-slide__btn"
style="background-color:#af1854 !important;color:#ffffff !important;display:inline-block !important;padding:9px 20px !important;border-radius:5px !important;text-decoration:none !important;font-weight:700 !important;">
Cotizar ahora </a>
</div>
</div>
</div><!-- /.bsm-track -->
<div class="bsm-arrows--center">
<button class="bsm-arrow bsm-arrow--prev" aria-label="Anterior">‹</button>
<button class="bsm-arrow bsm-arrow--next" aria-label="Siguiente">›</button>
</div>
<div class="bsm-dots" role="tablist">
<button class="bsm-dot bsm-dot--active"
data-index="0"
role="tab"
aria-label="Slide 1"></button>
<button class="bsm-dot"
data-index="1"
role="tab"
aria-label="Slide 2"></button>
<button class="bsm-dot"
data-index="2"
role="tab"
aria-label="Slide 3"></button>
</div>
</div>
</div>
<script>
(function(){
var el=document.getElementById('bsm_b604a075');
if(!el) return;
var track=el.querySelector('.bsm-track');
var dots=el.querySelectorAll('.bsm-dot');
var total=parseInt(el.dataset.total,10)||1;
var doAuto=el.dataset.autoplay==='true';
var ms=parseInt(el.dataset.interval,10)||10000;
var pauseH=el.dataset.pause==='true';
var cur=0,timer=null,busy=false;
function go(n,instant){
if(busy&&!instant) return;
n=((n%total)+total)%total;
if(n===cur&&!instant) return;
cur=n;
if(!instant){
busy=true;
track.classList.add('bsm-animating');
var done=function(){ track.removeEventListener('transitionend',done); track.classList.remove('bsm-animating'); busy=false; };
track.addEventListener('transitionend',done);
setTimeout(function(){ if(busy){ track.classList.remove('bsm-animating'); busy=false; } },500);
}
track.style.transform='translateX(-'+(cur*100)+'%)';
dots.forEach(function(d,i){ d.classList.toggle('bsm-dot--active',i===cur); d.setAttribute('aria-selected',i===cur?'true':'false'); });
}
function startAuto(){ if(doAuto&&total>1) timer=setInterval(function(){ go(cur+1); },ms); }
function stopAuto(){ clearInterval(timer); }
function resetAuto(){ stopAuto(); startAuto(); }
el.querySelectorAll('.bsm-arrow--prev').forEach(function(btn){ btn.addEventListener('click',function(e){ e.preventDefault(); go(cur-1); resetAuto(); }); });
el.querySelectorAll('.bsm-arrow--next').forEach(function(btn){ btn.addEventListener('click',function(e){ e.preventDefault(); go(cur+1); resetAuto(); }); });
dots.forEach(function(d){ d.addEventListener('click',function(e){ e.preventDefault(); go(parseInt(d.dataset.index,10)); resetAuto(); }); });
if(pauseH){ el.addEventListener('mouseenter',stopAuto); el.addEventListener('mouseleave',startAuto); }
var tx=null;
el.addEventListener('touchstart',function(e){ tx=e.touches[0].clientX; },{passive:true});
el.addEventListener('touchend',function(e){ if(tx===null) return; var dx=e.changedTouches[0].clientX-tx; if(Math.abs(dx)>40){ go(dx<0?cur+1:cur-1); resetAuto(); } tx=null; });
go(0,true);
startAuto();
})();
</script>
function dl_comprimir_descripcion_corta_productos() {
wc_enqueue_js('
var show_char = 300;
var ellipses = "... ";
var content = $(".woocommerce-product-details__short-description").html();
if (content.length > show_char) {
var a = content.substring(0, show_char);
var html = "<span class=\'truncated\'>" + a + ellipses + "<a class=\'read-more\'>...Leer más</a></p></span><span class=\'truncated\' style=\'display:none\'>" + content + "<a class=\'read-less\'>...Leer menos</a></span>";
$(".woocommerce-product-details__short-description").html(html);
}
$(".read-more").click(function(e) {
e.preventDefault();
$(".woocommerce-product-details__short-description .truncated").toggle();
});
$(".read-less").click(function(e) {
e.preventDefault();
$(".woocommerce-product-details__short-description .truncated").toggle();
});
');
}
Sirve para comprimir la descripción corta de los productos en WooCommerce, mostrando solo una parte limitada del texto y ofreciendo la opción de expandirlo o contraerlo.
Explicación del código:
- add_action( 'woocommerce_before_single_product', 'dl_comprimir_descripcion_corta_productos' );
Esta línea agrega una acción de WordPress para ejecutar la funcióndl_comprimir_descripcion_corta_productosjusto antes de que se muestre un producto en WooCommerce. Específicamente, se engancha en el hookwoocommerce_before_single_product. - La función
dl_comprimir_descripcion_corta_productos
Dentro de la función, se utiliza wc_enqueue_js para inyectar un bloque de JavaScript que se encargará de manipular la descripción del producto en el lado del cliente. - show_char y ellipses
En el código JavaScript, se define una variableshow_charque establece un límite de caracteres a mostrar en la descripción corta del producto (300 en este caso). La variableellipsesdefine los puntos suspensivos ("...") que aparecerán al truncar la descripción. - Condición para truncar la descripción
El contenido de la descripción corta del producto se obtiene usando jQuery:
var content = $(".woocommerce-product-details__short-description").html();
Si el contenido tiene más de 300 caracteres, se genera una nueva estructura HTML que mostrará los primeros 300 caracteres seguidos por un enlace "Leer más". - Mostrar más o menos texto
- Si la descripción es truncada, se muestra un enlace para que el usuario pueda expandir y ver el texto completo (
Leer más). - Al hacer clic en "Leer más", la descripción completa se despliega, reemplazando el texto reducido. También se muestra el enlace para "Leer menos", que contrae el texto nuevamente cuando se hace clic.
- Si la descripción es truncada, se muestra un enlace para que el usuario pueda expandir y ver el texto completo (
- Interacción con los enlaces
Los eventos.click()están configurados para los enlaces "Leer más" y "Leer menos", los cuales alternan la visibilidad del contenido truncado y completo cuando el usuario interactúa con ellos.
Mejoras posibles:
- Podrías agregar un efecto de desvanecimiento cuando el contenido se expande o contrae, para que la transición sea más suave. Esto se puede hacer modificando la función
toggle()por algo comofadeToggle()para un efecto de desvanecimiento.
En resumen, el código limita la longitud visible de la descripción corta del producto, proporcionando una experiencia de usuario más limpia y permitiendo expandir o contraer el contenido según sea necesario.
