Eklentiyi silerken tabloları veritabanından sil


13

Bir eklenti oluşturdum ve bir kullanıcı eklentimi sildiğinde tablolarımı veritabanından silmek için bir işlev eklemek istiyorum. Bir kullanıcı eklentimi devre dışı bıraktığında DB tabloları silen bir işlev oluşturdum, ama bunu istemiyorum. İşte kod:

// Delete table when deactivate
function my_plugin_remove_database() {
     global $wpdb;
     $table_name = "NestoNovo";
     $sql = "DROP TABLE IF EXISTS $table_name;";
     $wpdb->query($sql);
     delete_option("my_plugin_db_version");
}    
register_deactivation_hook( __FILE__, 'my_plugin_remove_database' );

Gördüğünüz gibi, bu işlev eklenti devre dışı bırakıldığında tabloları siler, ancak eklenti silindiğinde bunu yapmam gerekir.



Cevabınız için teşekkür ederim .. evet .. deniyorum .. hiçbir şey olmadı ..: /
Zzuum

Yanıtlar:


24

Bunu WordPress uninstall.php desteğini kullanarak yapabilirsiniz:

<?php
    if( ! defined( 'WP_UNINSTALL_PLUGIN' ) ) exit();
    global $wpdb;
    $wpdb->query( "DROP TABLE IF EXISTS NestoNovo" );
    delete_option("my_plugin_db_version");
?>

Bu uninstall.php dosyası, eklentiniz silindiğinde çağrılır.


8

Kodu buraya girin:

register_deactivation_hook( __FILE__, 'my_plugin_remove_database' );
function my_plugin_remove_database() {
     global $wpdb;
     $table_name = $wpdb->prefix . 'NestoNovo';
     $sql = "DROP TABLE IF EXISTS $table_name";
     $wpdb->query($sql);
     delete_option("my_plugin_db_version");
}   

2

Veritabanından tabloları silmek register_uninstall_hookyerine kanca kullanmanız gerekir register_deactivation_hook.

register_deactivation_hookbir eklentiyi devre dışı register_uninstall_hookbıraktığımızda ateşler ve eklentimizi istediğimizde ateşler remove/delete.

Yalnızca bir tablonuz varsa lütfen bu kodu kullanın:

function delete_plugin_database_table(){
    global $wpdb;
    $table_name = $wpdb->prefix . 'table_name';
    $sql = "DROP TABLE IF EXISTS $table_name";
    $wpdb->query($sql);
}

register_uninstall_hook(__FILE__, 'delete_plugin_database_table');

İkiden fazla tablonuz varsa, bu kodu kullanırsınız:

function delete_plugin_database_tables(){
        global $wpdb;
        $tableArray = [   
          $wpdb->prefix . "table_name1",
          $wpdb->prefix . "table_name2",
          $wpdb->prefix . "table_name3",
          $wpdb->prefix . "table_name4",
       ];

      foreach ($tableArray as $tablename) {
         $wpdb->query("DROP TABLE IF EXISTS $tablename");
      }
    }

    register_uninstall_hook(__FILE__, 'delete_plugin_database_tables');

Referans Bağlantıları:

https://developer.wordpress.org/reference/functions/register_uninstall_hook/ https://developer.wordpress.org/plugins/plugin-basics/uninstall-methods/


Teşekkürler günümü kurtarın :)
Arman H

0

"WORDPRESS PLUGIN BOILERPLATE GENERATOR" wppb kullanıyorsanız

include \ class -...- deactivator.php dosyasına gidin

ve aşağıdaki kodu yazın (lütfen ihtiyaçlarınıza göre değiştirin)

global $wpdb;

    $tableArray = [
        $wpdb->prefix . "table1",
        $wpdb->prefix . "table2",
    ];
    foreach($tableArray as $table){
        $wpdb->query("DROP TABLE IF EXISTS $table");
    }

Teşekkürler


-1

register_deactivation_hookEklenti devre dışı bırakıldığında bir şeyler yapmak için kullanabileceğiniz şu kanca olduğunu biliyorum . Belgelere bir göz atın ve aradığınız şey olup olmadığını görün.

Örneğin:

**register_deactivation_hook**(__FILE__, 'sm_deactivation');
function myplugin_deactivation(){
/*
     Stuff
*/}

-3

Ne yazık ki, WordPress bunu yapmak için işlevselliği ortaya çıkarmaz. Yalnızca register_uninstall_hook kancasını destekler. Bu kanca, kullanıcı eklentinin kendisini kaldırmasını isteyen kaldırma bağlantısına tıkladığında çağrılır. Eklenti eyleme geçmedikçe bağlantı etkin olmayacaktır. bkz. http://codex.wordpress.org/Function_Reference/register_uninstall_hook

ve register_deactivation_hook kancası. Çoğu eklenti geliştiricisinin yaptığı ayar tablosuna get_option, update_option kullanımı ile bir onay kutusu eklemektir. Bu seçenek işaretlendiğinde veriler kaldırılır.

Bu şekilde, geçici olarak devre dışı bırakma eklentinizin seçenek tablosunu sıfırlamaz.

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.