Error en WordPress MS wp-admin/includes/post.php con el generador de shortcodes
Tengo un problema grave con WordPress 3.1 con Multisite activado y mi generador de shortcodes personalizado en el tema. Por alguna razón, obtengo el siguiente error cada vez que creo una nueva página/entrada/tipo de entrada personalizada, etc. Específicamente es un problema con los botones de radio y la etiqueta 'name'. Cuando se elimina, todo funciona bien. Cuando se establece como una variable, obtengo el error. Sin embargo, establecer la variable como una constante (como texto) hace que funcione nuevamente.
Este es el error que estoy recibiendo; no tengo idea de qué significa ni qué lo causa:
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
Aquí está el código PHP (revisa la línea 892): http://pastebin.com/BNK7wE2W
Estoy un poco escéptico sobre compartir demasiada información antes de que el tema sea lanzado, pero si se requiere acceso al panel de administración, entonces si es posible ponte en contacto conmigo.
Gracias de antemano, Matthew.

Noté un problema en tu cláusula case
para los botones de radio: En tu etiqueta <label>
, usas $val
, pero creo que quisiste decir $option['id']
.
No veo cómo podría estar relacionado con el error de foreach
que estás recibiendo, pero no está de más corregirlo.
Lo extraño es que el error real proviene del código núcleo: wp-admin/includes/post.php
, línea 197. Parece que estás pasando algunos metadatos de publicación, pero no los estás pasando como un array, como lo espera. ¿Eso te ayuda a reducir el problema?

En realidad no. El error deja de ocurrir cuando elimino el meta box del Shortcode Generator, así que estoy bastante seguro de que es eso. El Shortcode Generator no tiene una función Post Save, por lo que no debería estar pasando nada cuando se publica el post. Cuando eliminas esa línea (892), el error también deja de ocurrir. El caso del botón de radio parece no gustarle el $option['id']
y no sé por qué. Configurarlo como rand(0, 100) generó un error completamente diferente.

Jugué un poco con el código. Eliminar el 'if($option['std'] == $opt) { echo 'checked="checked"'; }' también ha solucionado el error. Parece que Wordpress está obteniendo todos los botones de radio marcados como parte de un array o algo similar... O tal vez no; solo es una suposición.

¿Estás diciendo que si comentas la línea 892 (donde generas la etiqueta <input>
para un botón de radio), el error desaparece?

Sí. Sin embargo, he logrado reducirlo aún más; eliminando el 'if($option['std'] == $opt) { echo 'checked="checked"'; }'
se soluciona el error. No logro entender por qué sería esto..

Cuando aparece:
Advertencia: No se puede modificar la información de la cabecera - las cabeceras ya fueron enviadas por (la salida comenzó en...
Razón y Solución:
Normalmente se debe a que hay espacios, saltos de línea u otro contenido no deseado antes de una etiqueta de apertura <?php
o después de una etiqueta de cierre ?>
. Asegúrate de que no existan y guarda el archivo como UTF-8 sin BOM.
