WordPress Eklentisi Geliştirme - Üstbilgiler Zaten Gönderildi


15

WordPress eklentileri geliştiriyorum. Eklentimi etkinleştirdiğimde şu mesajı alıyorum:

Eklenti, etkinleştirme sırasında 293 karakter beklenmeyen çıktı oluşturdu. “Başlıklar zaten gönderildi” mesajlarını, sendikasyon yayınlarıyla ilgili sorunları veya diğer sorunları fark ederseniz, bu eklentiyi devre dışı bırakmayı veya kaldırmayı deneyin.

Eklenti çok iyi çalışıyor ama neden bu mesajı aldığımı bilmiyorum. Eklentim: http://wordpress.org/extend/plugins/facebook-send-like-button/


hata ayıklama etkinse, php bir uyarı verirse bunu alabilirsiniz.
Milo

1
Eklenti php dosyalarınızın sonunda php close etiketlerinden sonra herhangi bir boşluk bırakıp bırakmadığınızı kontrol edin.
Sisir

1
Eğer bir hata ayıklayıcı kullanıyorsanız, o zaman etrafında bir kesme noktası koymak activate_plugin methodin wordpress/wp-admin/includes/plugin.php. $ Output değişkeninin içeriği, her zaman İstisnaya yüklenen ve her zaman wordpress tarafından gizlenen verileri gösterir.
Todd Holmberg

Yanıtlar:


10

Tahminim, başlıklar gönderilmeden önce çıktı üreten bir PHP hatası alıyorsunuz. Eğer varsa E_NOTICEetkin, çağrı $_POST['foo']bu değişken ayarlı değilse hata: Bir "tanımsız değişken Bildirimi" oluşturabilir.

En iyi yöntem: GET, POST, COOKIE ve REQUEST değişkenleri hakkında hiçbir zaman varsaymayın. Daima önce isset()veya tuşlarını kullanarak kontrol edin empty().

if ( isset( $_POST['foo'] ) ) {
    $foo = (string) $_POST['foo'];
    // apply more sanitizations here if needed
}

13

Bunun nedeni genellikle açılış <?phpetiketinden önce veya kapanış ?>etiketinden sonraki boşluklar veya yeni satırlardır .

Bazı çözümleri görmek için bu sayfaya göz atın: Önceden gönderilen uyarı sorununu nasıl çözerim?

GÜNCELLEME

Eklenti kodunuzu inceledikten sonra fark ettiğim tek şey, kapanış PHP etiketinizin olmamasıdır. Son satırda, ekle?>


4
PHP dosyalarının kapanış ?>etiketine ihtiyacı yoktur . Aslında, sorun yaratmayacağını garanti etmenin bir yolu Headers already sentkapanış etiketini dışarıda bırakmaktır.
John P Bloch

2
Bu benim sorunumdu. Kapandıktan sonra bir sürü boş satırım vardı ?>.
Cam Jackson

1
Kapanış PHP etiketi kullanmanızı önermeyin. OP'deki sorunların türüne yol açan kötü bir uygulamadır ve WP Core kodlama standartlarına aykırıdır (bkz. Make.wordpress.org/core/handbook/best-practices/… )
butlerblog

4

Aktivasyon fonksiyonunuzun başlangıcına a ob_start();ve sonunda birtrigger_error(ob_get_contents(),E_USER_ERROR);

Ardından eklentinizi etkinleştirmeyi deneyin ve ardından ' beklenmeyen çıktıda oluşturulan 293 karakter ' in gerçekte ne olduğunu görebilirsiniz. Hata ayıklama işleminden sonra bu daha kolay olacaktır (yeni satır karakterlerini kaldırın veya bazı hataları çözün).


Bu aslında hata yüzgeçleri için dahi bir çözüm .. Teşekkürler ..
Obmerk Kronen

3

Daha önce aynı problemle karşılaştım, benim için ekstra beyaz boşluktu. Tüm bu beyaz alanları kaldırdıktan sonra eklenti herhangi bir hata / uyarı olmadan etkinleştirilebilir.


1

Sorunun bu olduğu konusunda pozitif değilim, ama eminim.

İkinci bağımsız değişken olarak geçerli bir geri arama kullanmanız gerekir register_activation_hook():

register_activation_hook(__FILE__,'twl_tablo_olustur');

Anlayabildiğim kadarıyla, twl_tablo_olustur()hiçbir yerde tanımlama yapmadınız. Bu kesinlikle beklenmedik çıktıyı açıklar (varolmayan bir işlevi çağırmaktan kaynaklanan PHP hatası) ve diğer tüm durumlarda neden iyi çalıştığını açıklar.


teşekkür ederim. Ancak register_activation_hook(__FILE__,'twl_tablo_olustur');bu kod eski sürümden. Yeni sürümde (kontrol edebilirsiniz, v1.3) güncellenir, ancak yine de aynı hatadır.
Eray

1

Eklenti / tema hata ayıklama iletileri çıkardığımda, özellikle wp_header çağrılmadan önce çıktı aldığımda bu iletileri çok fazla alıyorum.

Herhangi bir karakter çıkarıyorsanız, o zaman (burada yanlış olabilir) örtük bir başlık bildirimi olduğuna inanıyorum, bu nedenle normal header () çağrısı gerçekleştiğinde, 2 başlık bildirimi alamayacağınız için hatayı alırsınız.

Çıktıyı arabelleğe almak için ob_start () yöntemini kullanabilirsiniz, bu da hatayı kaldırmalıdır - şu yorumlara bakın: http://php.net/manual/en/function.header.php


1

Bunun eski bir soru olduğunu ve kabul edilmiş bir cevabı olduğunu biliyorum. Aktivasyon sorunu ne kapsar cevapların bir yeri vardır olabilir potansiyel olun. Ancak, cevapların hiçbiri gerçekten NASIL aktivasyonunu eklentisi ile debug konular.

WP eklentileri geliştirecekseniz, iş için doğru araçları da kullanabilirsiniz. Bunlardan biri Hata Ayıklama Çubuğu . Bu, WP'deki sorunları ayıklamanıza yardımcı olan bir eklentidir. Bir eklenti geliştiricisiyseniz, araç kutunuzda olması gerekir.

Hata Ayıklama Çubuğu, eklenti için bir dizi eklentiye sahiptir. Bunlardan biri , eklenti etkinleştirildiğinde üretilen PHP hatasını gösteren Hata Ayıklama Çubuğu Eklentisi Etkinleştirmesidir . Başlıkların gönderilmesine neden olan PHP hatasının ne olduğunu öğrendikten sonra, düzeltmek için nereye bakmanız gerektiğini bilirsiniz. Güven bana hata bilmeden olduğunu yerine çalışmakla size zaman bir ton kaydedebilirsiniz hata anlamaya olabilir .


Teşekkür ederim, bu çok faydalı!
user1190132

0

Eklentinin son revizyonuna (381724) bakıldığında sorun çok fazla alan

bu yapıyı her oluşturmak istediğinizde:

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

kodunuzda boşluk değil TAB kullanın.

Burada tüm boşlukları sekmelerle değiştirdiğim ve aktivasyonda herhangi bir mesaj alamadığım kod:

<?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>';
}

2
Bunun onunla bir ilgisi olmamalı. İşlevlerinizdeki boşluklar ve sekmeler kabul edilebilir ve bu hatayı oluşturmaz.
Matthew Muro

bir fonksiyonun içinde haklısınız ancak fonksiyon doğrudan bir şey çıkarırsa, örneğin: function blabla(){?> <input> <?php code... ?> output something <?php code.. }durum böyle değildir.
Bainternet

2
@MatthewMuro: Eğer bir fonksiyonun içindeki alanı okey bırakırsanız ama php kapanış etiketlerinden ?>sonra herhangi bir beyaz boşluk / satır sonu bırakırsanız, header already send errorbu ekstra beyaz boşluklar php motoru ayrıştırırken yazdırılacağı için alacaksınız .
Sisir

0

Her dosyanın sonundan php close etiketini (?>) Kaldırırsınız. ve ayrıca php close etiketi (?>)

eklentiyi etkinleştirdiğinizde tablonun zaten mevcut olup olmadığını kontrol edin.

sorunu kodla kaldırdım

    if($wpdb->get_var("SHOW TABLES LIKE '$table_name'") != $table_name) {

        $sql = "CREATE TABLE {$table_name}(
            id INT NOT NULL AUTO_INCREMENT,
            name VARCHAR(250),
            email VARCHAR(250),
            PRIMARY KEY (id)
        );";
        dbDelta($sql);
    }

-3

Benim sorunum, dosyanın bir UTF-8 dosyası olarak kaydedilmiş olmasıydı. Codepage 1252 ile kaydetmek hatayı çözdü.


1
Üzgünüm, bu yanlış. WordPress'teki her şey UTF-8 kodludur, Windows-1252, ASCII olmayan bir karakter kullandığınızda siteyi kırar.
fuxia
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.