Bug de Orbital Theme (y solución)

  • Autor Autor algoepico
  • Fecha de inicio Fecha de inicio
algoepico

algoepico

1
Eta
Verificación en dos pasos activada
Verificado por Whatsapp
¡Ha verificado su Paypal!
Suscripción a IA
Buenos días,

Un cliente comenzó repentinamente a sufrir un problema con su web: con no demasiadas visitas, su web se merendaba todo el procesador y la memoria RAM asignados por el hosting a su web. Tras descartar un problema en el hosting o que su web estuviese infectada con algún troyano, finalmente vi que el causante del problema era el famoso clúster del Orbital Theme. Así descubrí un bug que lleva ahí desde la primera versión (y os incluyo la solución).

No en todos los casos, pero a veces se daba la situación de que, publicando un clúster que incluía el extracto de las entradas y teniendo estas entradas a su vez otro clúster, se producía un bucle infinito (esto consumía todos los recursos y acababa no solo en error, sino con la página caída).

Corrección simple editando el tema (no recomendado, porque al actualizar se sobreescribirá tu código):

PHP:
// Archivo: inc/shortcodes.php
// Función: function orbital_cluster_shortcode, al comienzo

if ( ! isset( $GLOBALS[ 'orbital_cluster_parent_id' ] ) )
    $GLOBALS[ 'orbital_cluster_parent_id' ] = get_the_ID();

if ( $GLOBALS[ 'orbital_cluster_parent_id' ] != get_the_ID() )
    return ob_get_clean();

Corrección realizada en el archivo functions.php de un child theme (tema hijo) de Orbital (también podéis meter el código en el plugin "Header Footer Code Manager"):

PHP:
/**
 * Avoid Orbital Theme cluster infinite loop bug.
 */
if ( !function_exists( 'orbital_cluster_shortcode_avoid_infinite_loop' ) ) {
    function orbital_cluster_shortcode_avoid_infinite_loop( $atts ) {
        if ( ! isset( $GLOBALS[ 'orbital_cluster_parent_id' ] ) )
            $GLOBALS[ 'orbital_cluster_parent_id' ] = get_the_ID();

        // Avoid recursive iteration
        return $GLOBALS[ 'orbital_cluster_parent_id' ] == get_the_ID() ? orbital_cluster_shortcode( $atts ) : FALSE;
    }
}

add_action( 'init', function() {
    remove_shortcode( 'orbital_cluster' );
    add_shortcode( 'orbital_cluster', 'orbital_cluster_shortcode_avoid_infinite_loop' );
}, 10 );

Lo que hace el código es cortar el bucle de raíz. Procesa los clústeres de la página que está siendo visitada, pero ignora los de las páginas que están dentro del clúster, ya que es absurdo procesarlos (con sus consecuentes consultas a la BD) cuando no se van a mostrar. Independientemente de que tengas o no el problema con los bucles infinitos, esto ahorra consultas innecesarias a la base de datos.

He escrito al equipo que se está encargando ahora de su desarrollo, para hacerles ver el problema e indicarles la solución. A ver si hacen caso y así lo dejan solucionado en el propio tema, sin tener que meter nosotros un "parche". Pero, por si acaso, dejo por aquí la solución. Ya que le sirvió a mi cliente, si le resulta de utilidad también a algún forero, bienvenido sea.

Un saludo
 
Gracias por el aporte compa! No me ha pasado pero igual reviso y veo que tal me va con el código
 
No lo uso, pero se agradece mucho el aporte!
Ojala te respondan y lo reparen
 
este yo hasta ahora respecto a los cluster y al bug que mencionas,no he tenido ningun problema,sin embargo creo que te refieres para cuando se usa la modalidad de shortcodes en lugar de usar el bloque de cluster,o me equivoco ?
 
Ocurre aunque lo utilices desde Gutenberg. Pero solo se produce en ciertas circunstancias.
 
bueno vale tener en consideracion que en momento puede llegar a suceder,pero vale tendras alguna otras optimizaciones para tener en cuenta??? ,porque la verdad nunca se sabe 🙂
 
Esto sucedía en la web de un cliente, incluso desactivando todos los plugins.

Sinceramente, lo que tengo previsto es quitar ese tema de las webs propias en las que lo tengo jaja

Ya con clientes, pues es cosa de ellos. Pero este no es el primer problema que me encuentro en el Orbital.
 
a eso si,ese tema presenta errores cuando crees que ya se soluciono el primero y justo aparece otro ,por eso estado intentando crear mi propio theme,aunque me cueste un poco leer codigo :')
 
a eso si,ese tema presenta errores cuando crees que ya se soluciono el primero y justo aparece otro ,por eso estado intentando crear mi propio theme,aunque me cueste un poco leer codigo :')
Justo estoy también en eso jeje Estoy creando mi propio theme para aplicarlo en todas mis webs (aunque el diseño de cada web sea distinto). Así tengo controlado lo que tengo en funcionamiento.
 
claro,yo por ahora solo posee una web y mas que todo le falta algo de diseño porque el tema queda limitado en esa capacidad,asi que le estoy añadiendo lo que puedo :9
 
Atrás
Arriba