Cum pot repara eroarea: "Notice: Undefined offset: 0"?
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:
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?

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
.

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

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

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.

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.

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.
