Eroare WordPress MS wp-admin/includes/post.php cu generatorul de shortcode
Am o problemă gravă în WordPress 3.1 cu Multi Site activat și generatorul de shortcode personalizat al temei mele. Din nu știu ce motiv, primesc următoarea eroare de fiecare dată când creez o pagină/post/pagină de tip post personalizat etc. Este în mod specific o problemă cu butoanele radio și tag-ul 'name'. Când acesta este eliminat, totul funcționează corect. Când este setat ca variabilă, primesc eroarea. Totuși, setarea variabilei la o constantă (cum ar fi text) face să funcționeze din nou.
Aceasta este eroarea pe care o primesc; nu am nici o idee ce înseamnă sau ce o cauzează:
Warning: Invalid argument supplied for foreach() in /home/matthew/public_html/wp-admin/includes/post.php on line 197
Warning: Cannot modify header information - headers already sent by (output started at /home/matthew/public_html/wp-admin/includes/post.php:197) in /home/matthew/public_html/wp-includes/pluggable.php on line 897
Iată codul PHP (verificați linia 892): http://pastebin.com/BNK7wE2W
Sunt puțin reticent în a dezvălui prea multe informații înainte de lansarea temei, dar dacă este necesar acces la panoul de administrare, atunci dacă este posibil, contactați-mă.
Mulțumesc anticipat, Matthew.
Am observat o problemă în clauza case
pentru butoanele radio: În eticheta <label>
, folosești $val
, dar cred că voiai să folosești $option['id']
.
Nu văd cum ar putea fi legat de eroarea foreach
pe care o primești, dar nu strica să o corectezi.
Lucrul ciudat este că eroarea reală vine din codul de bază: wp-admin/includes/post.php
, linia 197. Se pare că transmiți niște meta date pentru postare, dar nu transmiți un array, așa cum se așteaptă. Te ajută asta să identifici problema?

Nu chiar. Eroarea încetează să apară când elimin caseta meta Shortcode Generator, așa că sunt destul de sigur că problema e de la ea. Shortcode Generator nu are o funcție de Salvare Post, deci nu ar trebui să transmită nimic când postarea este publicată. Când elimini acea linie (892), eroarea încetează și ea să apară. Cazul butonului radio nu pare să-i placă de $option['id']
și nu știu de ce. Setarea lui la rand(0, 100) a generat o eroare complet diferită.

Am mai modificat puțin codul. Eliminarea condiției 'if($option['std'] == $opt) { echo 'checked="checked"'; }' a rezolvat și ea eroarea. Se pare că Wordpress primește toate butoanele radio bifate ca parte dintr-un array sau ceva similar.. Sau poate nu; doar o presupunere.

Spui că dacă comentezi linia 892 (unde afișezi tagul <input>
pentru un buton radio), eroarea dispare?

Da. Am reușit să îngustez problema și mai mult; eliminând 'if($option['std'] == $opt) { echo 'checked="checked"'; }'
rezolvă eroarea. Nu pot să înțeleg de ce s-ar întâmpla asta...

Când primiți:
Avertisment: Nu se pot modifica informațiile antetului - antetele au fost deja trimise de (output început la...
Cauză și Soluție:
De obicei, această eroare apare din cauza existenței de spații, linii goale sau alte caractere nedorite înainte de deschiderea tag-ului <?php
sau după închiderea tag-ului ?>
. Asigurați-vă că nu există astfel de caractere și salvați fișierul ca UTF-8 fără BOM.
