Come posso risolvere: "Notice: Undefined offset: 0"?
Sto avviando un sito WordPress e sto riscontrando un problema con alcuni dei miei articoli.
Questo problema sta interessando solo 2 articoli su 4 e dopo aver investigato non riesco a capire il motivo.
Questo messaggio di errore appare proprio sotto la sezione commenti:
Notice: Undefined offset: 0 in /home/***/public_html/wp-includes/class-wp-query.php on line 3152
Quando cerco quella riga, trovo questa funzione:
Ho cercato questa funzione nel mio codice WordPress e ho trovato solo alcuni risultati:
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();
Riguardo questi risultati, ci sono due diverse implementazioni della funzione rewind_post
in query.php
e class-wp-query.php
.
Ci sono solo due punti dove questa funzione viene invocata. Mi sono concentrato su quello relativo al tema che sto utilizzando, themify-wp-filters.php
, viene chiamata dalla funzione: function themify_404_template
. Questo non dice molto, perché non sto visualizzando una pagina 404.
Attualmente sto utilizzando il plugin Super Socializer ma non ho abilitato la funzionalità dei commenti social.
Qualche idea?
Stai cercando nei file core di WordPress la causa del notice PHP, il che è una perdita di tempo, perché 1) dubito che tu abbia trovato un nuovo bug in WordPress, 2) non vuoi modificare i file core di WordPress per risolvere un problema di un tema o plugin, e 3) l'errore è causato da un tema o plugin e non dal core di WordPress, anche se il notice PHP lo indica come proveniente dai file core.
E oltre a tutto questo, è un notice PHP. Non un errore, non un fatal error, ma un notice. Significa semplicemente "ehi, guardami, potresti volermi sistemare prima o poi, ma non sono un errore." Leggi https://stackoverflow.com/questions/4624474/php-difference-between-notice-and-warning
NOTICE: È un messaggio che indica cosa dovresti fare e cosa non dovresti fare.
WARNING: Si verifica durante l'esecuzione, ma non interrompe l'esecuzione del codice.
ERROR: Si verifica anch'esso durante l'esecuzione, ma il programma non continua e termina.
Quindi controlla in wp-config.php e disattiva il debug per non vedere i notice https://codex.wordpress.org/Debugging_in_WordPress Oppure controlla nel php.ini del tuo account di hosting; vedi https://stackoverflow.com/questions/1053424/how-do-i-get-php-errors-to-display
Per trovare in modo più efficace la causa di un errore o notice PHP, usa il Debug come linkato sopra. Ma la cosa più semplice da fare è disattivare tutti i plugin e riattivarli finché non trovi quello che genera il notice. Poi chiedi assistenza al plugin o cerca nei loro forum. Oppure, se un plugin non è la causa, passa al tema predefinito di WordPress e verifica se il notice è nei log degli errori registrati da wp_debug.

Se c'è un notice PHP, allora c'è un bug nel codice che genera il notice. Ovviamente l'oggetto wp_query è costruito male, oppure è stato modificato in qualche modo imprevisto, ma se il core non può garantire l'integrità dell'oggetto, dovrebbe verificare l'esistenza dell'indice nell'array prima di accedervi, e/o fornire un errore migliore. L'OP aveva semplicemente fatto il debugging che la sua conoscenza/comprensione gli faceva ritenere rilevante, il che non è sufficiente, ma non giustifica il considerare i notice come non-bug...

Ottimo sforzo @markratledge, aggiungerei anche questo link: http://stackoverflow.com/questions/6549561/notice-undefined-offset-0-in

Grazie per la tua risposta @markratledge, lo apprezzo molto.
Non mi ero reso conto che stavo affrontando un errore PHP invece di un errore WordPress. Un errore da principiante, immagino.
Il tuo suggerimento riguardo alla disabilitazione della modalità DEBUG in wp-config.php
mi ha ricordato che ho abilitato questa modalità qualche giorno fa. Quindi, forse il messaggio NOTICE era sempre presente ma non lo vedevo perché la modalità DEBUG era disabilitata.
Ti ringrazio davvero perché mi hai fatto capire un po' meglio come funziona WP. Grazie.
PS. Proverò a trovare la causa principale di questo problema, ma sono contento di poterlo nascondere.

Recentemente ho fornito un'analisi per la funzione 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();
Molto probabilmente il problema non risiede nel core di WordPress, dato che gli ingegneri senior di WordPress non permetterebbero che si verificassero tali problemi.
Dall'esperienza, gli sviluppatori del tema a volte potrebbero dimenticarsi di pulire il codice, quindi potresti aspettarti il problema in:
wp-content/themes/magazine/themify/themify-wp-filters.php:
Utilizzando rewind_posts
senza verificare alcune condizioni con if()
.
Il tema dovrebbe avere questi controlli a seconda di cosa si tenta di riavvolgere.
Non ho il codice quindi non posso dire di più. Potresti inviare questo problema al supporto del tema.

Ciao @prosti, come ho commentato sopra, ho eliminato tutti i plugin e ho verificato che questo è un problema del tema. Contatterò il supporto di Themify nel caso possano aiutare.
