Come posso risolvere: "Notice: Undefined offset: 0"?

29 gen 2017, 17:58:12
Visualizzazioni: 38.1K
Voti: 1

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:

Screenshot della funzione PHP che mostra l'errore undefined offset

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?

3
Commenti

hai disabilitato tutti i tuoi plugin?

funkysoul funkysoul
29 gen 2017 18:07:41

È necessario uno stack trace per cercare di comprendere il problema. La causa principale di un problema non è sempre dove viene emesso l'avviso.

Mark Kaplun Mark Kaplun
29 gen 2017 19:21:19

Sì @funkysoul, ho disabilitato tutti i plugin e il messaggio è ancora presente. Poi, ho sostituito il mio tema Themify con Twenty Seventeen e, voilà, il messaggio NOTICE è scomparso. Quindi, è decisamente un problema del tema.

WarioNeila WarioNeila
29 gen 2017 23:53:29
Tutte le risposte alla domanda 5
4

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.

29 gen 2017 18:24:41
Commenti

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...

Mark Kaplun Mark Kaplun
29 gen 2017 19:15:30

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

prosti prosti
29 gen 2017 19:55:08

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.

WarioNeila WarioNeila
29 gen 2017 23:46:33

@WarioNeila86, il codice di WordPress è codice PHP.

prosti prosti
30 gen 2017 00:12:35
2

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.

29 gen 2017 19:53:12
Commenti

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.

WarioNeila WarioNeila
29 gen 2017 23:56:14

Sì, esattamente qui wp-content/themes/magazine/themify/themify-wp-filters.php: c'è il problema (nel tema) come ho indicato. @WarioNeila86

prosti prosti
30 gen 2017 00:09:33
0

Per me, la soluzione è stata chiamare the_post() prima di chiamare the_content().

2 dic 2020 19:04:10
0

Ho riscontrato lo stesso avviso e la causa era dovuta all'uso di WordPress while(have_posts) all'interno di un file single-{nome}.php. L'avviso è scomparso dopo aver rimosso il loop.

17 dic 2020 13:43:18
0
-1

Per rimuovere lo script, devi configurare il file wp-config.php come definito di seguito.

define( 'WP_DEBUG', false );

25 mar 2020 19:01:55