Desarrollo de complementos para Wordpress - Encabezados ya enviados

11

Estoy desarrollando plugins para Wordpress. Cuando activo mi complemento, recibo un mensaje

  

El complemento generó 293 caracteres de   Salida inesperada durante la activación.   Si te fijas en "los encabezados ya enviados"   Mensajes, problemas con la sindicación.   feeds u otros temas, intente   desactivando o eliminando este plugin.

El complemento funciona muy bien, pero no sé por qué recibo este mensaje. Mi complemento es: enlace

    
pregunta Eray 06.05.2011 - 15:23

8 respuestas

8

Supongo que aparece un error de PHP, que genera resultados antes de que se envíen los encabezados. Si tiene E_NOTICE habilitado, llamar a $_POST['foo'] puede generar un error de "Aviso: variable no definida" si esa variable no está establecida.

Mejores prácticas: nunca asuma nada sobre las variables GET, POST, COOKIE y REQUEST. Compruebe siempre primero utilizando isset() o empty() .

if ( isset( $_POST['foo'] ) ) {
    $foo = (string) $_POST['foo'];
    // apply more sanitizations here if needed
}
    
respondido por el Geert 06.05.2011 - 16:17
13

Esto suele deberse a espacios o líneas nuevas antes de la etiqueta de apertura <?php o después de la etiqueta de cierre ?> .

Echa un vistazo a esta página para ver algunas soluciones: ¿Cómo soluciono los encabezados ya enviados con problemas de advertencia? / p>

ACTUALIZAR

Después de examinar el código de tu complemento, lo único que noté es que no tienes una etiqueta PHP de cierre. En la última línea, agregue ?>

    
respondido por el Matthew Muro 06.05.2011 - 15:40
4

Al principio de su función de activación, coloque un ob_start(); y al final ponga un trigger_error(ob_get_contents(),E_USER_ERROR);

Luego intente activar su complemento, y luego podrá ver qué son realmente los " generados 293 caracteres de salida inesperada ". A partir de ese momento, la depuración será más fácil (ya sea eliminar los nuevos caracteres de línea o resolver algunos errores).

    
respondido por el lulalala 26.09.2011 - 09:54
3

He enfrentado el mismo problema antes, para mí era un espacio extra en blanco. Después de eliminar todos esos espacios en blanco, el complemento podría activarse sin ningún error / advertencia.

    
respondido por el yashbinani 25.12.2011 - 13:01
1

No estoy seguro de que este sea el problema, pero estoy bastante seguro de ello.

Debe usar una devolución de llamada válida como segundo argumento en register_activation_hook() :

register_activation_hook(__FILE__,'twl_tablo_olustur');

Por lo que puedo decir, no ha definido twl_tablo_olustur() en ninguna parte. Esto explicaría el resultado inesperado (error de PHP generado al intentar llamar a una función no existente) y explicaría por qué funciona bien en todas las demás circunstancias.

    
respondido por el John P Bloch 06.05.2011 - 16:18
1

Tiendo a recibir estos mensajes mucho cuando estoy enviando mensajes de depuración de tema / tema, especialmente cuando estoy enviando cosas antes de que se llame a wp_header.

Si está generando algún carácter, creo que (podría estar mal aquí) que hay una declaración de encabezado implícita, por lo que cuando se produce la llamada al encabezado normal (), aparece el error ya que no puede tener 2 declaraciones de encabezado .

Puedes usar ob_start () para amortiguar la salida, lo que debería eliminar el error; mira los comentarios aquí: enlace

    
respondido por el anu 06.05.2011 - 16:58
0

Mirando la última revisión del complemento (381724) el problema es Demasiados espacios

cada vez que quieras crear esta estructura:

function blabla(){
   <= space
   something...
}

en tu código usa TAB y no espacios.

Aquí está el código donde reemplacé todos los espacios con pestañas y no recibo ningún mensaje en la activación:

<?php
/*
Plugin Name: Facebook Send Button By Teknoblogo.com
Plugin URI: http://www.teknoblogo.com/facebook-gonder-butonu-eklenti
Description: Adds Facebook's Send and Like buttons to your posts ! Author : <a href="http://www.teknoblogo.com">teknoblogo.com</a>
Version: 1.3
Author: Eray Alakese
Author URI: http://www.teknoblogo.com
License: GPL2
*/

wp_register_script('fgb_script', "http://connect.facebook.net/en_US/all.js#xfbml=1");
wp_enqueue_script('fgb_script');

function fgb_ayarlari_yap()
{
    add_option('fgb_yer', 'u');
    add_option('fgb_buton', 'snl');
    add_option('fgb_manual', 'hayir');
}
register_activation_hook( __FILE__, 'fgb_ayarlari_yap' );
function fgb_ayarlari_sil()
{
    delete_option('fgb_yer');
    delete_option('fgb_buton');
    delete_option('fgb_manual');
}
register_deactivation_hook( __FILE__, 'fgb_ayarlari_sil' );


function fgb_ekle($content)
{
    $fgb_yer = get_option('fgb_yer'); 
    $fgb_buton_opt = get_option('fgb_buton'); 
    $fgb_manual = get_option('fgb_manual');
    $fgb_perma  = rawurlencode(get_permalink());
    $fgb_send_button = "<fb:send href=\"$fgb_perma\" font=\"\"></fb:send>";
    $fgb_like_button = "<fb:like href=\"$fgb_perma\" send=\"false\" width=\"450\" show_faces=\"true\" font=\"\"></fb:like>";
    $fgb_snl_button = "<fb:like href=\"$fgb_perma\" send=\"true\" width=\"450\" show_faces=\"true\" font=\"\"></fb:like>";
    if($fgb_buton_opt == "send")
    {
        $fgb_buton = $fgb_send_button;
    }
    elseif($fgb_buton_opt == "like")
    {
        $fgb_buton = $fgb_like_button;
    }
    elseif($fgb_buton_opt == "snl")
    {
        $fgb_buton = $fgb_snl_button;
    }
    else
    {
        echo "Buton türü alınamadı!";
    }

    if ($fgb_manual=="hayir"){
        if ($fgb_yer == "u")
        {
            $content = $fgb_buton."<br />".$content;
        }
        elseif ($fgb_yer == "a")
        {
            $content = $content."<br />".$fgb_buton;
        }
        return $content;
    }
    elseif($fgb_manual=="evet"){
        echo $fgb_buton;
    }
}
if (get_option('fgb_manual')=="hayir"){ add_filter( "the_content", "fgb_ekle" ); }

add_action('admin_menu', 'fgb_admin_menu');
function fgb_admin_menu() {
    add_options_page('Facebook Send Button', 'Facebook Send Button', 'manage_options', 'fgb', 'fgb_admin_options');
}
function fgb_admin_options() {
    if (!current_user_can('manage_options'))  {
        wp_die( __('You do not have sufficient permissions to access this page.') );
    }
    echo '<div class="wrap">';
    ?>
    <h2>Facebook Send & Like Button</h2>
    <? 
    if($_POST["fgb_gonder"])
    {
      echo "<h3>saved</h3>";
      update_option('fgb_yer', $_POST["fgb_yer"]);
      update_option('fgb_buton', $_POST["fgb_buton"]);    
      update_option('fgb_manual', $_POST["fgb_manual"]);

        $fgb_admin_yer = get_option('fgb_yer');
        $fgb_admin_buton = get_option('fgb_buton');
        $fgb_admin_manual = get_option('fgb_manual');
    }
    ?>
    <form action="<?php echo $_SERVER['REQUEST_URI']; ?>" method="POST">
    Show Facebook buttons <select name="fgb_yer">
        <option value="u" <?php if($fgb_admin_yer == "u"){echo "SELECTED";}?>>before content</option>
        <option value="a" <?php if($fgb_admin_yer == "a"){echo "SELECTED";}?>>after content</option>
    </select> and i want <select name="fgb_buton">
        <option value="snl" <?php if($fgb_admin_buton=="snl"){echo "SELECTED";}?>>send and like buttons together</option>
        <option value="send" <?php if($fgb_admin_buton=="send"){echo "SELECTED";}?>>just send button</option>
        <option value="like" <?php if($fgb_admin_buton=="like"){echo "SELECTED";}?>>just like button</option>
    </select> . <br />
    <input type="radio" value="hayir" name="fgb_manual" <?php if($fgb_admin_manual=="hayir"){echo "CHECKED";}?> /> put buttons for me, AUTOMATICALLY <br />
    <input type="radio" value="evet" name="fgb_manual" <?php if($fgb_admin_manual=="evet"){echo "CHECKED";}?> /> i can put them, MANUALLY <br />

    <input type="submit" class="button-primary" name="fgb_gonder" value="<?php _e('Save Changes') ?>" />
    </form>
    <br />If you use <strong>manuel insertion</strong> , you have to add this code to your theme : 
    <strong>&lt;?php if(function_exists('fgb_ekle')) {   fgb_ekle(); }?&gt;</strong>

    <hr />
    <em>If you like this plugin, please <a href="http://wordpress.org/extend/plugins/facebook-send-like-button/">vote</a> .
    Author : <a href="http://www.teknoblogo.com">Eray Alakese</a>
    You can <a href="mailto:info@teknoblogo.com">mail me</a> for bugs, thanks.</em>

    <?php
    echo '</div>';
}
    
respondido por el Bainternet 06.05.2011 - 15:59
-3

Mi problema fue que el archivo se guardó como un archivo UTF-8. Al guardarlo con la página de códigos 1252 se resolvió el error.

    
respondido por el Shawn 06.06.2012 - 01:47

Lea otras preguntas en las etiquetas