• 15-05-2020, 23:52:23
    #1
    merhaba ufak bi eklenti yazmaya başladım. olayımız şu index.php sorunsuz çalışıyor buradan aldığım verileri eklentinin temizle.php sayfasına gönderiyorum.

    sayfayı adres.com/wp-content/plugin/eklenti/temizle.php olarak açarsam sorunsuz çalışıyor ama wordpress admin paneli içinde açılmıyor tabi.

    sayfayı adres.com/wp-admin/admin.php?page=gv_temizle olarak açarsam admin panelinde boş sayfa açılıyor. ne echo çalışıyor nede post edilen içerik.



    index.php
    add_action('admin_menu', 'gv_menu');
    function gv_menu(){
    add_menu_page('GetVeri','GetVeri', 'manage_options', 'get_veri', 'get_veri_manage', 'dashicons-clipboard', 4);
    add_menu_page('GetVeri Temizle', 'GetVeri Temizle', 'manage_options', 'gv_temizle', 'gv_temizle_manage', 'dashicons-clipboard', '');
    remove_menu_page('gv_temizle');
    }
    temizle.php
    <?php
    function gv_temizle_manage(){
    echo "içerdeyiz";
    }
    $icerik = $_POST['icerik'];
    $dom = new DOMDocument();
    $dom->loadHTML($icerik);
    echo $dom->saveHTML();
    ?>
  • 16-05-2020, 00:51:35
    #2
    remove_menu_page silince de aynı sorun oluyor mu?
    Bir de, gv_temizle_manage fonksiyonunun altıntaki kodlar neden fonksiyonun içerisinde değil?
    Son olarak debug açık mı?
  • 16-05-2020, 03:01:10
    #3
    bilimokur adlı üyeden alıntı: mesajı görüntüle
    remove_menu_page silince de aynı sorun oluyor mu?
    Bir de, gv_temizle_manage fonksiyonunun altıntaki kodlar neden fonksiyonun içerisinde değil?
    Son olarak debug açık mı?
    remove_menu_page silince aynen sorun devam ediyor.

    gv_temizle_manage fonksiyonunun altıntaki kodlar hangi kısım çalışacak acaba diye kontrol amaçlı koydum. çalışmayınca direk üstte fonksiyonu ekledim kontrol için.

    debug kapalıydı açtım ve bir sürü hata çıktı :

    Warning: Cannot modify header information - headers already sent by (output started at /home/***/public_html/deneme/wp-content/plugins/getveri/index.php:34) in /home/***/public_html/deneme/wp-includes/functions.php on line 6221

    Warning: Cannot modify header information - headers already sent by (output started at /home/***/public_html/deneme/wp-content/plugins/getveri/index.php:34) in /home/***/public_html/deneme/wp-admin/includes/misc.php on line 1259

    Warning: Cannot modify header information - headers already sent by (output started at /home/***/public_html/deneme/wp-content/plugins/getveri/index.php:34) in /home/***/public_html/deneme/wp-admin/admin-header.php on line 9


    Warning: call_user_func_array() expects parameter 1 to be a valid callback, function 'gv_temizle_manage' not found or invalid function name in /home/***/public_html/deneme/wp-includes/class-wp-hook.php on line 287
  • 16-05-2020, 04:11:24
    #4
    Cannot modify header information hatası fonksiyonun altındaki kodlardan kaynaklanıyor. Diğer hata ise callback fonksiyonunun bulunamamasından kaynaklanıyor.

    gv_temizle_manage fonksiyonunu gv_menu fonksiyonunun hemen altına koyun.
  • 17-05-2020, 18:27:31
    #5
    bilimokur adlı üyeden alıntı: mesajı görüntüle
    Cannot modify header information hatası fonksiyonun altındaki kodlardan kaynaklanıyor. Diğer hata ise callback fonksiyonunun bulunamamasından kaynaklanıyor.

    gv_temizle_manage fonksiyonunu gv_menu fonksiyonunun hemen altına koyun.
    header hatalarını tamamen düzettim.

    callback fonksiyonu konusunda da haklısın, dediğin şekilde sayfa eklenince çalıştı ama sadece gv_temizle_manage fonksiyonu çalışıyor. gv_temizle.php dosyasından hiç bişey çalışmıyor. onu çözemedim?
  • 17-05-2020, 18:34:21
    #6
    gv_temizle.php içerisinde ne yapmak istediğinizi bilmiyorum. Açıklarsanız daha iyi yardımcı olabilrim. Ayrıca callback fonksiyonu ekrana veri getirip yazdırmak için vardır. Diğer işlemler için kullanılmaz. Diğer işlemler için admin_init kancasını kullanarak $_POST tan gelen verileri yakalamanız gerekiyor.
  • 17-05-2020, 18:45:24
    #7
    index.php de yapılan işlemler gv_temizle.php ye post ediliyor ve orada işleniyor. ben bunu eklenti haline getirmeye çalışıyorum.

    iki dosyayıda ben ftp de herhangi bi klasöre atsam açsam düzgün çalışıyor. eklenti olarak yapınca bu şekilde problem oldu.

    callback olayını daha iyi anladım şimdi. bu fonksiyona ihtiyacım yok benim. direkt gv_temizle.php dosyasının çalışmasını nasıl sağlayabilrim?

    öğrenmek istediğim buydu
  • 19-05-2020, 16:54:05
    #8
    gv_temizle.php ye de ihtiyacınız yok anladığım kadarıyla. Şöyle bir işlem yapabilirsiniz.

    .php dosyası içindeki kodlarınızı fonksiyon içerisinden yaptırmanız daha iyi olur.

    Formunuzun şöyle olduğunu varsayalım:

    <form action="<?php echo admin_url(); ?>" method="POST">
        <input type="submit" value="Temizle">
        <?php wp_nonce_field( 'gv-temizle', 'gv-temizle' ); ?>
    </form>
    Bu da php tarafı:
    function gv_temizle() {
        # Sadece gv-temizle $_POST ta çalışması için.
        if ( ! isset( $_POST[ 'gv-temizle' ] ) ) {
            return;
        }
    
        # Farklı yerlerden gelen istekleri engellemek için.
        if ( ! wp_verify_nonce( $_POST[ 'gv-temizle' ], 'gv-temizle' ) ) {
            return;
        }
    
        /*
        Burada yaptırmak istediğiniz işlemler.
        delete_post_meta();
        delete_option();
        error_log();
        vs..
        vs..
        */
    
        // İşlemler tamamlanınca yönlendirme yapmamız gerek.
        wp_redirect( home_url( '/' ) );
        exit();
    }
    
    add_action( 'admin_init', 'gv_temizle' );
  • 20-05-2020, 15:28:40
    #9
    bilimokur adlı üyeden alıntı: mesajı görüntüle
    gv_temizle.php ye de ihtiyacınız yok anladığım kadarıyla. Şöyle bir işlem yapabilirsiniz.

    .php dosyası içindeki kodlarınızı fonksiyon içerisinden yaptırmanız daha iyi olur.

    Formunuzun şöyle olduğunu varsayalım:

    <form action="<?php echo admin_url(); ?>" method="POST">
        <input type="submit" value="Temizle">
        <?php wp_nonce_field( 'gv-temizle', 'gv-temizle' ); ?>
    </form>
    Bu da php tarafı:
    function gv_temizle() {
        # Sadece gv-temizle $_POST ta çalışması için.
        if ( ! isset( $_POST[ 'gv-temizle' ] ) ) {
            return;
        }
    
        # Farklı yerlerden gelen istekleri engellemek için.
        if ( ! wp_verify_nonce( $_POST[ 'gv-temizle' ], 'gv-temizle' ) ) {
            return;
        }
    
        /*
        Burada yaptırmak istediğiniz işlemler.
        delete_post_meta();
        delete_option();
        error_log();
        vs..
        vs..
        */
    
        // İşlemler tamamlanınca yönlendirme yapmamız gerek.
        wp_redirect( home_url( '/' ) );
        exit();
    }
    
    add_action( 'admin_init', 'gv_temizle' );
    Ekstra detaylı cevabın için teşekkürler.