Soporte » Guías – Resolución de problemas » get_next_post() no devuelve ningún objeto

  • Hola,
    acabo de actualizar mi WordPress a la versión 5.5, y por lo que sea ha dejado de funcionar la función get_next_post(), que no devuelve ningún objeto. Sin embargo este comportamiento solo sucede en los nuevos post que publico o republico, en los antiguos si que funciona.

    Sin embargo, get_previous_post() si que devuelve objeto, y puede generar un link en absolutamente todos los post del blog.

    He activado define(‘SAVEQUERIES’, true) para poder ver la queries que se generan al cargar la página, y he pintado una a una en phpMyadmin, y no he conseguido ver ninguna que tenga relacción con la paginación para poder ver el resultado.

    No utilizo ninguna taxonomía rara, ni custom, al menos que yo sepa.

    ¿Alguna idea de por donde puedo empezar a mirar?

    Gracias por adelantado!

    • Este debate fue modificado hace 3 años, 5 meses por luismoyano.
Viendo 6 respuestas - de la 1 a la 6 (de un total de 6)
  • Moderador jose64

    (@jose64)

    Hola.

    Como en el anterior debate, te vuelvo a dejar el enlace a las Instruciones de uso de los foros, como ya te expliqué en el otro debate:

    Fallo en la paginación después de actualizar a 5.5

    Si no indicas URL, ni tema ni nada poco se te puede decir con fundamento.

    No utilizo ninguna taxonomía rara, ni custom, al menos que yo sepa.

    Por eso se te piden los datos que no quieres dar, te repito: sino quieres dar públicamente ningún dato tendrás que contratar un profesional que te haga el diagnóstico. Si no aportas nuevos datos, pues habrá que cerrar también este debate.

    Iniciador del debate luismoyano

    (@luismoyano)

    Hola José Luis,
    a ver… que somos muy mayores los dos, que soy de tu quinta, jeje…
    No necesito ningún profesional, ya que tengo suficientes conocimientos de php y javascript como para poder debuguear por mi mismo que puede estar pasando.

    Ya te dije la razón del por qué no pongo ninguna url, y es porque no quiero que la web de mi cliente (una persona muy conocida en su sector) aparezca en ningún resultado en google en 2 días debido a este problema tonto producto por una actualización, eso creo que es comprensible.

    Pero es que además, el dar la url no va a solucionar absolutamente nada aquí, porque el problema es puramente interno. Es por lo que os pido ayuda para saber por donde puedo empezar a buscar, en lugar de tener que ponerme a revisar la aplicación entera fichero a fichero como si fuera un forense.

    El problema es que dentro del fichero que se encarga de la paginación, la función get_next_post() no devuelve nada (ningún objeto) en ninguno de los post nuevos que publico, mientras que get_prev_post() si que devuelve un objeto con el post correcto.

    Y es extraño porque la función get_adjancent_post() es la misma para ambos, con el true como única diferencia.

    En el anterior debate que publiqué, cometí un error al identificar la función, y pensaba que era related_post() (no soy experto en WordPress), y te lo iba a decir en el anterior post, pero al ver que lo habías cerrado, no he tenido más remedio que abrir otro.

    He buscado en google, y el problema con esta función viene de lejos, desde versiones anteriores a la 4.x, pero normalmente tiene más que ver con taxonomías específicas y customizadas, o al menos es lo que he podido averiguar hasta ahora, porque tampoco le puedo dedicar todo mi tiempo a esto, porque mi profesión, la que me paga las facturas, es otra.

    Al activar save_queries para poder ver que consultas se están haciendo al pintar la página, tampoco puedo ver ninguna consulta relacionada con el post anterior y previo, la consulta que se genera en get_adjacent_post(), y es por eso que pido ayuda, porque estoy perdido, y no sé donde buscar y que probar para poder averiguar que está fallando…. repito… solo en los nuevos post que publico desde que he actualizado el WordPress, porque el resto funcionan perfectamente.

    Pero en fin… Si después de esta explicación, hecha creo yo desde el respeto hacia tu labor y las normas del foro, y explicada lo suficientemente clara como para saber que el exponer la url de mi cliente no va a solucionar absolutamente nada aquí, aún así me la sigues pidiendo, pues en fin.. que le voy a hacer… cierra este hilo también, y ya me iré a buscar la ayuda al foro en inglés.

    Y bueno… si al final consigo solucionar el problema, si no es que en una siguiente actualización lo solucionan ellos mismos, no te preocupes, ya abriré otro hilo para que la gente sepa que hacer si les pasa lo mismo, aunque no pondré ninguna url tampoco, si no te es un problema.

    Moderador jose64

    (@jose64)

    Hola @luismoyano

    De los dos debates que has abierto:

    Cuando la consulta se refiere a una página en particular debes poner su dirección para comprobarla, además de tema y plugins utilizas.

    Si no indicas URL, ni tema ni nada poco se te puede decir con fundamento.

    De las instrucciones de uso de los foros:

    Incluye toda la información que puedas
    Describe todos los detalles que puedas sobre el entorno de tu alojamiento, tu instalación de WordPress (plugins, temas, etc) y el problema que tienes.

    Entiendo tu postura con respecto a la URL, es comprensible y no se cierran debates por no ponerla, de hecho muchos debates que se resuelven no tienen la url porque no es necesaria, pero no solo te pedí la url, te pedí al menos el tema y ni eso quieres mostrar, los problemas con paginación que he visto a partir de esta actualización han sido provocados por problemas con el javascript del tema y se han resuelto con sus posteriores actualizaciones. El problema semejante al que describes ya lo vi anteriormente en otro debate con el tema Bridge, en anteriores actualizaciones las entradas publicadas a partir de la actualización no se paginaban correctamente y se solucionó cuando el tema se actualizó.

    Me parece que, como persona que tiene un perfil de desarrollo, es comprensible que entiendas que sin más detalles poco se puede hacer, salvo darte las recomendaciones básicas que seguramente ya de sobra sabes, cambia el tema por uno de los oficiales y prueba para descartar que el error provenga de ahí. Si el error persiste, pues lo lógico es que lo reportes e inclusive colabores con el equipo de Core en su solución.

    Te comento esto porque como bien dices, peinamos canas, quiero que comprendas que no es por capricho, es por necesidad para poder buscar una solución adecuada, seguramente el problema sea el tema, pero sin saber ni siquiera cuál es el yo al menos no te lo puedo asegurar.

    Iniciador del debate luismoyano

    (@luismoyano)

    Hola José Luis,
    pues esto ya es una ayuda. La verdad es que no se me ha ocurrido que javascript puede tener algo que ver, porque como te digo, dentro del php de la paginación del tema ni siquiera se rellena el objeto. Y además, tampoco veo errores de javascript en la consola.

    De todas formas, acabo de ver que también en la migración se había generado un verdadero problema con Yoast SEO, ya que no se habían actualizado bien sus tablas, y generaba errores a cada minuto hasta que el fichero de logs ha rebasado los 30 gigas, eso solo en 10 días que lleva la web en un VPS nuevo, porque como te decía la web es de una persona conocida y tiene muchas visitas al día.

    Esta tarde me pondré con la web de nuevo, una vez he solucionado el problema con Yoast SEO, a ver si consigo algo más, aunque arreglar las tablas de Yoast SEO no ha solucionado el problema. Tampoco en los logs he visto nada más que me haga pensar que falla. Pero bueno… en algún momento fallara algo que me pueda dar la pista, digo yo.

    Y si no lo que dices… Esta noche pongo la web en mantenimiento un ratito, cambio el tema a uno por defecto, y si funciona ya tengo por donde empezar a buscar.

    No obstante, y por si a alguien más le ha pasado, el tema que usa la web es SOLEDAD de theme forest, y no está actualizada a la última versión, pero si a la penúltima, y acabo de mirar y no existe versión nueva más allá de la nueva y salió antes de la actualización. Pero bueno… miraré de actualizarla, porque al fin y al cabo, uso un child theme, no hay problema en actualizar.

    Gracias por tu explicación y talante, y te contaré cosas si averiguo algo que le pueda ayudar a los demás.

    Saludos,
    Luis

    Iniciador del debate luismoyano

    (@luismoyano)

    Hola,
    ya voy averiguando más cositas.

    En el tema que uso, los next post se toma con la función así:
    $next_post = get_next_post(); //sin ninguna variable pasada a la función.

    Yo en su lugar he pasado a usar la función madre de esta forma:
    $next_post = get_adjacent_post( true, ”, false );

    Y ahora empiezo a obtener más links hacia el siguiente post que antes, ahora casi funciona perfecto. El problema es que los links están en función de la categoría, y yo necesito que estén solo en función de su fecha de publicación, independientemente de la categoría donde estén incluidos.

    Porque ahora lo que ocurre, es que el último post está en una categoría X, al igual que el post número 4, mientras los otros están en otra categoría, así que cuando voy del 1 al 1, los botones atrás y delante funcionan, pero cuando llego al post 4, el botón next post va al sitio correcto, pero el prev post va al posy número 1, porque es la categoría que los une.

    En fín…

    ¿Que variables le habría de pasar a la función para que los links se pintaran por fecha, e independientemente de la categoría donde estén incluidos?

    Nota: ya podemos descartar problemas de otro tipo, como javascript, tema, etc… El problema está en la función, y en que los post que se muestran están en diferentes categorías.

    Iniciador del debate luismoyano

    (@luismoyano)

    Ya lo he solucionado pero con ninguna función de wordpress, porque ni get_next_post(), ni get_adjacent_post() con diferentes argumentos, ni the_post_navigation() me funcionaban, ni retornaban objetos.

    Al final, he generado un par de consultas por mysql para obtener el post anterior y posterior en función de la fecha del post dado, y ya funciona perfecto.

    No se como se realizan esas funciones, ni que consultan a la base de datos (porque no aparecen ni en query_monitor plugin, ni en los logs de mysql) así que me quedo con la duda de saber cual es el problema.

    Pero en fin… Nada que no se pueda resolver a mano con mysql.

    Gracias igualmente por la ayuda!

    • Esta respuesta fue modificada hace 3 años, 5 meses por luismoyano.
Viendo 6 respuestas - de la 1 a la 6 (de un total de 6)
  • El debate ‘get_next_post() no devuelve ningún objeto’ está cerrado a nuevas respuestas.