Error en WordPress MS wp-admin/includes/post.php con el generador de shortcodes

28 feb 2011, 21:38:20
Vistas: 1.7K
Votos: 0

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.

0
Todas las respuestas a la pregunta 2
6

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?

28 feb 2011 22:42:27
Comentarios

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.

Matthew Ruddy Matthew Ruddy
1 mar 2011 00:24:02

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.

Matthew Ruddy Matthew Ruddy
1 mar 2011 00:38:27

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

Dougal Campbell Dougal Campbell
1 mar 2011 00:43:53

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

Matthew Ruddy Matthew Ruddy
1 mar 2011 01:06:42

El código de pastebin ha expirado...

Dougal Campbell Dougal Campbell
1 mar 2011 22:19:33

Solucioné el problema. Tenía que ver con dos opciones que tenían el mismo nombre e ID; un problema con $option['id']. Por cierto, gracias por tu ayuda.

Matthew Ruddy Matthew Ruddy
3 mar 2011 21:18:59
Mostrar los 1 comentarios restantes
1

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.

28 feb 2011 22:42:41
Comentarios

Esta vez no. La salida espuria proviene del mensaje de advertencia de PHP generado en wp-admin/includes/post.php como describí en mi respuesta.

Dougal Campbell Dougal Campbell
28 feb 2011 22:48:31