¿Cómo puedo solucionar: "Notice: Undefined offset: 0"?
Estoy comenzando un sitio web en WordPress y tengo un problema con algunas de mis entradas.
Este problema solo está afectando a 2 de 4 artículos y después de investigar no puedo encontrar una razón para ello.
Este mensaje de error aparece justo debajo de la sección de comentarios:
Notice: Undefined offset: 0 in /home/***/public_html/wp-includes/class-wp-query.php on line 3152
Cuando busco esa línea, encuentro esta función:
He buscado esta función en mi código de WordPress y solo encontré algunas coincidencias:
grep -r rewind_posts *
wp-content/themes/magazine/themify/themify-wp-filters.php: rewind_posts();
wp-includes/class-wp-query.php: $this->rewind_posts();
wp-includes/class-wp-query.php: public function rewind_posts() {
wp-includes/feed-rdf.php:<?php rewind_posts(); while (have_posts()): the_post(); ?>
wp-includes/query.php:function rewind_posts() {
wp-includes/query.php: $wp_query->rewind_posts();
Respecto a estos resultados, hay dos implementaciones diferentes de esta función rewind_post
en query.php
y class-wp-query.php
.
Solo hay dos lugares donde se invoca esta función. Me centro en el relacionado con el tema que se está utilizando, themify-wp-filters.php
, se llama desde esta función: function themify_404_template
. Esto no dice mucho, porque no estoy viendo una página 404.
Actualmente estoy usando el plugin Super Socializer pero no he habilitado la función de comentarios sociales.
¿Alguna idea?
Estás buscando en los archivos núcleo de WordPress la causa del aviso PHP, lo cual es una pérdida de tiempo, ya que 1) dudo que hayas encontrado un nuevo error en WordPress, 2) no querrás modificar los archivos núcleo de WordPress para solucionar un problema de un tema o plugin, y 3) el error es causado por un tema o plugin y no por el núcleo de WordPress, aunque aparezca en el aviso PHP como si apuntara a los archivos núcleo.
Y además de todo eso, es un aviso PHP. No es un error, ni un error fatal, sino un aviso. Lo único que significa es "oye, mírame, quizá quieras arreglarme en algún momento, pero no soy un error". Lee https://stackoverflow.com/questions/4624474/php-difference-between-notice-and-warning
AVISO: Es un mensaje que indica lo que deberías hacer y lo que no deberías hacer.
ADVERTENCIA: Ocurre durante la ejecución, pero no interrumpe la ejecución del código.
ERROR: También ocurre durante la ejecución, pero el programa no continúa su ejecución, se termina.
Así que revisa en wp-config.php y desactiva el modo depuración para no ver los avisos https://codex.wordpress.org/Debugging_in_WordPress O revisa en php.ini de tu cuenta de hosting; mira https://stackoverflow.com/questions/1053424/how-do-i-get-php-errors-to-display
Para encontrar de forma más efectiva la causa de un error o aviso PHP, usa Debug como se indica en los enlaces anteriores. Pero lo más simple es desactivar todos los plugins y reactivarlos hasta encontrar el que genera el aviso. Luego pide ayuda al plugin o revisa sus foros. O, si un plugin no es la causa, cambia al tema predeterminado de WordPress y comprueba si el aviso aparece en los registros de error grabados por wp_debug.

Si hay un aviso de PHP, entonces hay un error en el código que emite el aviso. Obviamente, el objeto wp_query está construido de manera incorrecta o fue modificado de alguna forma imprevista, pero si el núcleo no puede garantizar la integridad del objeto, debería verificar la existencia del índice en el arreglo antes de acceder a él, y/o dar un mejor mensaje de error. El OP solo había hecho la depuración que su conocimiento/comprensión le hizo considerar relevante, lo cual no es suficiente, pero no justifica llamar a los avisos como no errores...

Muy buen esfuerzo @markratledge, también agregaría este enlace: http://stackoverflow.com/questions/6549561/notice-undefined-offset-0-in

Gracias por tu respuesta @markratledge, realmente lo aprecio.
No me di cuenta de que estaba enfrentando un error de PHP en lugar de un error de WordPress. Un error de principiante, supongo.
Tu sugerencia sobre desactivar el modo DEBUG en wp-config.php
me recordó que habilité este modo hace unos días. Así que, tal vez el mensaje de NOTICE siempre ha estado ahí pero no lo veía antes porque el modo DEBUG estaba desactivado.
Realmente te agradezco porque me has hecho entender un poco mejor cómo funciona WP. Gracias.
PD. Intentaré encontrar la causa raíz de este problema, pero me alegra poder ocultarlo.

Recientemente proporcioné un análisis sobre la función rewind_posts
.
>grep -r rewind_posts *
wp-content/themes/magazine/themify/themify-wp-filters.php: rewind_posts();
wp-includes/class-wp-query.php: $this->rewind_posts();
wp-includes/class-wp-query.php: public function rewind_posts() {
wp-includes/feed-rdf.php:<?php rewind_posts(); while (have_posts()): the_post(); ?>
wp-includes/query.php:function rewind_posts() {
wp-includes/query.php: $wp_query->rewind_posts();
Lo más probable es que el problema no esté en el núcleo de WordPress, ya que los ingenieros superiores de WordPress no permitirían que ocurrieran este tipo de problemas.
Por experiencia, los desarrolladores de temas a veces pueden olvidarse de limpiar el código, por lo que puedes esperar que el problema esté en:
wp-content/themes/magazine/themify/themify-wp-filters.php:
Al usar rewind_posts
sin verificar algunas condiciones con if()
.
El tema debería tener estos verificadores dependiendo de lo que intente rebobinar.
No tengo el código, así que no puedo decir más. Puedes enviar este problema al soporte del tema.

Hola @prosti, como comenté anteriormente, he eliminado todos los plugins y he verificado que este es un problema del tema. Me pondré en contacto con el soporte de Themify por si pueden ayudar.
