Solución al problema de compatibilidad entre Detube y actualización de WordPress v4.5.x

Si tienes un sitio web basado en WordPress y usas la plantilla Detube habrás notado que tras la actualización del WordPress a la versión 4.5.x las secciones en el home han dejado de funcionar y se debe a que hay un problema de compatibilidad entre Detube y WordPress 4.5.x; pero siéntete feliz que aquí te mostraré cómo solucionarlo.

Tras la actualización al WP v4.5.3 todo parecía funcionar correctamente en el resto de mi página pero lo que no se mostraban eran las miniaturas de los videos y solamente aparecían los títulos de las secciones en el home.

Y como yo utilizo Detube v1.4.8 para este sitio y como no quiero tener problemas de seguridad con WordPress, es que busqué la solución en la red pero no la encontré en ningún lugar ni en las páginas en inglés, y al no hallar la solución me puse manos a la obra.

Empecé a husmear en la función dp_section_box() que se encuentra en el archivo functions.php en la carpeta del theme, y luego de hacer una serie de debugs con las variables di con un dato interesante. En la versión 4.5.x del WP el query que devuelve los datos de las secciones es ligeramente distinto al del query en la versión 4.3.1 del WordPress que era el que estaba usando anteriormente.

El query para la version 4.3.1 según la configuración de mi sitio es este:

SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts
INNER JOIN wp_term_relationships ON (wp_posts.ID = wp_term_relationships.object_id)
WHERE 1=1
AND ( wp_term_relationships.term_taxonomy_id IN (3) )
AND wp_posts.post_type IN ('post', 'wpvr_video', 'wpvr_video')
AND (wp_posts.post_status = 'publish')
GROUP BY wp_posts.ID
ORDER BY wp_posts.post_date DESC LIMIT 0, 4

Y el query en la version 4.5.3 es este:

SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts
INNER JOIN wp_term_relationships ON (wp_posts.ID = wp_term_relationships.object_id)
WHERE 1=1
AND wp_posts.post_title = 'CINE'
AND ( wp_term_relationships.term_taxonomy_id IN (3) )
AND wp_posts.post_type IN ('post', 'wpvr_video', 'wpvr_video')
AND (wp_posts.post_status = 'publish')
GROUP BY wp_posts.ID
ORDER BY wp_posts.post_date DESC LIMIT 0, 4

Como ya se dieron cuenta, la diferencia entre ambos querys es esta parte: AND wp_posts.post_title = ‘CINE’, lo cual es un error porque el título del artículo no es CINE sino es el título de la sección y en consecuencia la consulta siempre devolverá un conjunto vacío.

Desde la versión 4.4.0 del WordPress se añadió el parámetro ‘$title’ en la clase WP_Query (ver query.php) y este parámetro ahora forma parte de algunas consultas y como vimos dando resultados ligeramente diferentes pero que a la larga nos ocasionaba errores con las secciones de nuestra plantilla.

Solución al problema de compatibilidad entre Detube y WordPress 4.5.x

La solucion es simple. Solo tienes que añadir esto $args[‘title’] = ”; dentro la función dp_section_box() que se encuentra en el archivo de script functions.php de tu theme.

Aquí te muestro como quedaría el código de la función con este pequeño cambio:

/**
* Output a Section Box
*
* @since deTube 1.0
*/

function dp_section_box($args = array()) {
$defaults = array(
'post_type' => 'post',
'cat' => '',
'taxonomies' => array(),
'view' => 'grid-small',
'title' => '',
'link' => '',
'post__in' => '',
'posts_per_page' => '',
'hide_if_empty' => false
);
$args = wp_parse_args($args, $defaults);
extract($args);

$posts_per_page = absint($posts_per_page);

// Set default posts number if no specified
if(empty($posts_per_page)) {
if($view == 'grid-mini')
$posts_per_page = 8;
elseif($view == 'grid-small')
$posts_per_page = 6;
elseif($view == 'grid-medium')
$posts_per_page = 4;
elseif($view == 'list-small')
$posts_per_page = 3;
elseif($view == 'list-medium')
$posts_per_page = 2;
elseif($view == 'list-large')
$posts_per_page = 1;
}

$args['posts_per_page'] = $posts_per_page;
$args['title'] = ''; // Para hacer Detube compatible con WP 4.5+

$args = dp_parse_query_args($args);
$query = new WP_Query($args);
...
...
...

Lo que estamos haciendo es blanquear el argumento ‘title’ para que cuando se ejecute el query éste se comporte como en la versión 4.3.1 del WP y nos devuelva los thumbnails o miniaturas de las secciones correctamente.

Espero te haya servido este artículo para solucionar el problema de compatibilidad entre Detube y WordPress, te agradecería dejes un comentario para enterarnos como te fue.

Saludetes
Miky

Anuncios

Dejanos tu comentario

Tu dirección de email no será publicada. 

5 Comentarios

  • Miky, muchas gracias para solución!
    Tengo otro problema. La miniatura (thumbnails) en la barra lateral (sidebar) también no se presentó.

    ¿Me puedes ayudar?

    • Hola Alex, cual es tu página para ver si puedo ayudarte. Para que aparezcan esas miniaturas yo le hice unos cambios al codigo.

  • Gustavo hace 2 años

    Hola, muchas gracias por tu aporte, la verdad que me salvo de varias horas de investigar de donde venia el problema. Como en el otro comentario, a mi tampoco me aparece el sidebar, vos me podras dar una idea de donde mirar como para acotar la busqueda. Gracias.

  • Gustavo hace 2 años

    Hola, ya encontre la solucion para el sidebar, en el archivo widgets/widget-posts.php debajo de la linea 43 agregar la linea
    $query_args[‘title’] = ”;

    Eso resuelve el problema con el sidebar (al menos para mi)

    • Que bueno compañero, a más de uno le servirá tu solución a lo del sidebar