Cum pot repara eroarea: "Notice: Undefined offset: 0"?

29 ian. 2017, 17:58:12
Vizualizări: 38.1K
Voturi: 1

Creez un site WordPress și am o problemă cu unele dintre articolele mele.

Această problemă afectează doar 2 din 4 articole și după investigații nu-mi pot da seama care este motivul.

Acest mesaj de eroare apare chiar sub secțiunea de comentarii:

Notice: Undefined offset: 0 în /home/***/public_html/wp-includes/class-wp-query.php la linia 3152

Când caut această linie, găsesc următoarea funcție:

Captură de ecran cu codul funcției din class-wp-query.php

Am căutat această funcție în codul WordPress și am găsit doar câteva potriviri:

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();

În ceea ce privește aceste rezultate, există două implementări diferite ale acestei funcții rewind_post în query.php și class-wp-query.php.

Există doar două locuri unde această funcție este apelată. M-am concentrat pe cea legată de tema care este folosită, themify-wp-filters.php, aceasta fiind apelată din funcția: function themify_404_template. Acest lucru nu spune multe, pentru că nu vizualizez o pagină 404.

În prezent folosesc plugin-ul Super Socializer dar nu am activat funcția de comentarii sociale.

Aveți vreo idee?

3
Comentarii

ai dezactivat toate pluginurile tale?

funkysoul funkysoul
29 ian. 2017 18:07:41

Este necesar un trace al stivei pentru a încerca să înțelegem problema. Motivul de bază al unei probleme nu este întotdeauna acolo unde este emisă notificarea.

Mark Kaplun Mark Kaplun
29 ian. 2017 19:21:19

Da @funkysoul, am dezactivat toate pluginurile și mesajul încă apare. Apoi, am înlocuit tema mea Themify cu Twenty Seventeen și, voila, mesajul NOTICE a dispărut. Deci, este cu siguranță o problemă legată de temă.

WarioNeila WarioNeila
29 ian. 2017 23:53:29
Toate răspunsurile la întrebare 5
4

Cauți în fișierele de bază ale WordPress motivul pentru care apare notificarea PHP, ceea ce este o pierdere de timp, deoarece 1) nu cred că ai descoperit o nouă eroare în WordPress, 2) nu este recomandat să modifici fișierele de bază ale WordPress pentru a rezolva o problemă a unui theme sau plugin, și 3) eroarea este cauzată de un theme sau plugin și nu de nucleul WordPress, dar apare în notificarea PHP ca fiind legată de fișierele de bază.

În plus, este vorba despre o notificare PHP. Nu o eroare, nu o eroare fatală, ci o simplă notificare. Tot ce înseamnă este "hei, uită-te la mine, poate vei dori să mă rezolvi la un moment dat, dar nu sunt o eroare." Citește https://stackoverflow.com/questions/4624474/php-difference-between-notice-and-warning

NOTIFICARE: Este un mesaj care indică ce ar trebui să faci și ce nu ar trebui să faci.

AVERTIZARE: Apare în timpul execuției, dar nu întrerupe execuția codului.

EROARE: Apare și ea în timpul execuției, dar programul nu continuă execuția, ci se termină.

Deci verifică în wp-config.php și dezactivează debug-ul ca să nu mai vezi notificările https://codex.wordpress.org/Debugging_in_WordPress Sau verifică în php.ini al contului tău de hosting; vezi https://stackoverflow.com/questions/1053424/how-do-i-get-php-errors-to-display

Pentru a găsi mai eficient cauza unei erori sau notificări PHP, folosește Debug așa cum este explicat mai sus. Dar cel mai simplu lucru pe care îl poți face este să dezactivezi toate plugin-urile și să le reactivezi unul câte unul până găsești cel care generează notificarea. Apoi solicită ajutor de la dezvoltatorul plugin-ului sau caută pe forumurile lor. Sau, dacă un plugin nu este cauza, schimbă theme-ul la cel implicit WordPress și verifică dacă notificarea apare în jurnalele de erori înregistrate de wp_debug.

29 ian. 2017 18:24:41
Comentarii

Dacă există o notificare PHP, atunci există o eroare în codul care emite notificarea. Evident, obiectul wp_query este construit greșit sau a fost modificat într-un mod neprevăzut, dar dacă nucleul WordPress nu poate garanta integritatea obiectului, ar trebui să verifice existența indexului în matrice înainte de a-l accesa și/sau să ofere o eroare mai bună. Utilizatorul a făcut doar depanarea pe care cunoștințele/înțelegerea sa i-au sugerat că este relevantă, ceea ce nu este suficient, dar nu justifică să nu considerăm notificările ca fiind erori...

Mark Kaplun Mark Kaplun
29 ian. 2017 19:15:30

Foarte bun efort @markratledge, aș adăuga și acest link: http://stackoverflow.com/questions/6549561/notice-undefined-offset-0-in

prosti prosti
29 ian. 2017 19:55:08

Mulțumesc pentru răspuns @markratledge, apreciez foarte mult.

Nu mi-am dat seama că am întâlnit o eroare PHP și nu o eroare WordPress. O greșeală de începător, presupun.

Sugestia ta despre dezactivarea modului DEBUG în wp-config.php mi-a amintit că am activat acest mod acum câteva zile. Deci, este posibil ca mesajul NOTICE să fi fost mereu acolo, dar nu l-am văzut până acum pentru că modul DEBUG era dezactivat.

Îți mulțumesc sincer pentru că m-ai făcut să înțeleg puțin mai bine cum funcționează WP. Mulțumesc.

PS. Voi încerca să găsesc cauza principală a acestei probleme, dar mă bucur că o pot ascunde.

WarioNeila WarioNeila
29 ian. 2017 23:46:33

@WarioNeila86, codul WordPress este cod PHP.

prosti prosti
30 ian. 2017 00:12:35
2

Am oferit recent o analiză pentru funcția 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();

Cel mai probabil problema nu se află în nucleul WordPress, deoarece inginerii superiori WordPress nu ar permite ca astfel de probleme să apară.

Din experiență, dezvoltatorii de teme pot uita uneori să curețe codul, așa că poți aștepta problema în:

wp-content/themes/magazine/themify/themify-wp-filters.php: 

Folosind rewind_posts fără a verifica anumite condiții cu if(). Tema ar trebui să aibă aceste verificări în funcție de ce încearcă să rewind.

Nu am codul așa că nu pot spune mai multe. Poți trimite această problemă la suportul temei.

29 ian. 2017 19:53:12
Comentarii

Salut @prosti, așa cum am menționat mai sus, am șters toate plugin-urile și am verificat că problema este tema. Voi contacta suportul Themify în caz că mă pot ajuta.

WarioNeila WarioNeila
29 ian. 2017 23:56:14

Da, exact aici wp-content/themes/magazine/themify/themify-wp-filters.php: se află problema (în tema), așa cum am subliniat. @WarioNeila86

prosti prosti
30 ian. 2017 00:09:33
0

Pentru mine, soluția a fost să apelez the_post() înainte de a apela the_content().

2 dec. 2020 19:04:10
0

Am întâlnit aceeași notificare și cauza a fost utilizarea funcției WordPress while(have_posts) în interiorul unui fișier single-{name}.php. Și notificarea a dispărut după ce am eliminat bucla.

17 dec. 2020 13:43:18
0
-1

Pentru a elimina scriptul, trebuie să configurezi fișierul wp-config.php așa cum este definit mai jos.

define( 'WP_DEBUG', false );

25 mar. 2020 19:01:55