Errore in WordPress MS wp-admin/includes/post.php con il generatore di shortcode
Sto riscontrando un problema serio con WordPress 3.1 con Multi Site abilitato e il generatore di shortcode personalizzato del mio tema. Per qualche motivo, ottengo il seguente errore ogni volta che creo una nuova pagina/post/pagina di tipo post personalizzato, ecc. È specificamente un problema con i pulsanti radio e il tag 'name'. Quando viene rimosso, tutto funziona bene. Quando è impostato su una variabile, ottengo l'errore. Tuttavia, impostando la variabile su una costante (come del testo) fa sì che funzioni di nuovo.
Questo è l'errore che sto ricevendo; non ho idea di cosa significhi e cosa lo causi:
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
Ecco il codice PHP (controlla la linea 892): http://pastebin.com/BNK7wE2W
Sono un po' scettico nel rilasciare troppe informazioni prima che il tema venga pubblicato, ma se è necessario l'accesso al pannello di amministrazione allora, se possibile, contattatemi.
Grazie in anticipo, Matthew.
Ho notato un problema nella tua clausola case
per i pulsanti radio: nel tag <label>
, usi $val
, ma penso che intendessi $option['id']
.
Non vedo come potrebbe essere correlato all'errore foreach
che stai ottenendo, ma non farà male correggerlo.
La cosa strana è che l'errore reale proviene dal codice core: wp-admin/includes/post.php
, riga 197. Sembra che tu stia passando dei meta dei post, ma non stai passando un array, come invece richiesto. Questo ti aiuta a restringere il campo?

Non proprio. L'errore smette di verificarsi quando rimuovo il meta box Shortcode Generator, quindi sono abbastanza sicuro che sia quello. Lo Shortcode Generator non ha una funzione Post Save, quindi non dovrebbe passare nulla quando il post viene pubblicato. Quando rimuovi quella riga (892), anche l'errore smette di verificarsi. Il caso del radio button sembra non gradire $option['id']
e non so perché. Impostandolo su rand(0, 100) ha generato un errore completamente diverso.

Ho sperimentato un po' con il codice. Rimuovere il 'if($option['std'] == $opt) { echo 'checked="checked"'; }' ha anche risolto l'errore. Sembra che Wordpress stia ottenendo tutti i radio button selezionati come parte di un array o qualcosa di simile.. O forse no; è solo un'ipotesi.

Stai dicendo che se commenti la riga 892 (dove viene generato il tag <input>
per un radio button), l'errore scompare?

Sì. Sono riuscito a restringere ulteriormente il problema; rimuovendo il codice 'if($option['std'] == $opt) { echo 'checked="checked"'; }'
risolve l'errore. Non riesco a capire perché succeda questo..

Quando ottieni:
Avviso: Impossibile modificare le informazioni dell'intestazione - le intestazioni sono già state inviate da (output iniziato a...
Motivo e Soluzione:
Di solito è dovuto alla presenza di spazi, nuove righe o altri caratteri indesiderati prima di un tag <?php
di apertura o dopo un tag di chiusura ?>
. Assicurati che non ce ne siano e salva il file come UTF-8 senza BOM.
