Eklentileri Kodla Nasıl Etkinleştirebilirsiniz?


22

Mümkünse, kurulu eklentiler (dosyaların wp-content / plugins dizinine yerleştirildiği anlamına gelir) diğer eklentilerden nasıl etkinleştirilebilir?

Yanıtlar:


30

Bazı web uygulamalarında şöyle yaptım:

function run_activate_plugin( $plugin ) {
    $current = get_option( 'active_plugins' );
    $plugin = plugin_basename( trim( $plugin ) );

    if ( !in_array( $plugin, $current ) ) {
        $current[] = $plugin;
        sort( $current );
        do_action( 'activate_plugin', trim( $plugin ) );
        update_option( 'active_plugins', $current );
        do_action( 'activate_' . trim( $plugin ) );
        do_action( 'activated_plugin', trim( $plugin) );
    }

    return null;
}
run_activate_plugin( 'akismet/akismet.php' );

1
Rarst'ın yazdığı gibi, bu çok "güvenli" değildir. Bu şekilde etkinleştirdiğiniz eklentilerin güvenli olduğundan / sitenizi bozmayacağından emin olmalısınız.
sorich87

10
Hiç de güvenli değil, hatta heck, onları programlı olarak çalıştırıyorsanız, ne yaptığınızı bilmeniz gerekir. ;-)
Denis de Bernardy

Güvenlik bir yana - Yani, bu sorunun bir parçası değil, değil mi? - Sorich'in yaklaşımını seviyorum çünkü standart aktivasyon filtrelerini çağırıyor. Böylece eklentiler, varsa kurulum rutinlerini çalıştırmak için bir değişiklik yaparlar.
hakre

3
Bu, en azından daha yakın zamanda, tekerleği yeniden icat ediyor. Ben yerleşik kullandım activate_plugin()ve aynı iş gibi görünüyor.
Jake

1
@SagiveSEO Tamamen güvenlidir - WP'nin yaptığı gibi, kullanıcı girişi / onayı gerektirmesi dışında ve bu bağlar için çekler ve kontroller yapması dışında - sadece bu işlevi herhangi bir yerde başlatmak için gerekli kontrolleri yapın - dışardan erişilememesi için web vb.) ve rastgele hiçbir şekilde çağrılamaz.
birlik 100

13

Eklenti aktivasyon işlemi WP admin arayüzü ile çalışmak için kodlanmıştır. Eklentilerin hatalı çalışmasını önlemek için bazı kontroller yapar (başlangıçta yükleme WP'yi bozabilir).

Başka yerlerde kullanılamaz olarak belgelenen activate_plugin()işlev ( kaynak ) tarafından ele alınır .

Bu nedenle, eklentiyi kodla etkinleştirmek istiyorsanız, hedefin kendisi nispeten kolaydır - active_pluginsbu eklentiyi ekleme seçeneğini değiştirmek . Ancak, ilgili etkinleştirme kancalarını sıfırdan yeniden oluşturmanız gerekecektir ve kum havuzu basamağı olmadan etkinleştirerek kırılma bölgesini riske atacaksınız.


7

Eklentiler 'active_plugins' seçeneğindeki bir dizide saklanır. Dizi, aktif olan her eklentiye dosya yolunu içerir.

Bir eklentiyi etkinleştirmek için, onun yolunun ne olacağını belirlemeniz gerekir, sonra bu yolu iletin activate_plugin($plugin_path).

Ancak söylenenden daha kolay, ve (en azından 2.9'da) çekirdek kod bunu kolaylaştırmıyor.

Activate_plugin () işlevini kullanmadan önce plugin.php dosyasını wp-admin / include / dizininden eklemeniz gerekir. Eklentinizin zaten aktif olmadığından emin olmak için kontrol etmelisiniz. Sonuç şöyle gözüküyor (YMMV):

// Define the new plugin you want to activate
$plugin_path = '/path/to/your/new/plugin.php';
// Get already-active plugins   
$active_plugins = get_option('active_plugins');
// Make sure your plugin isn't active
if (isset($active_plugins[$plugin_path]))
    return;

// Include the plugin.php file so you have access to the activate_plugin() function
require_once(ABSPATH .'/wp-admin/includes/plugin.php');
// Activate your plugin
activate_plugin($plugin_path);

Bunu WP 2.9'daki üretimde kullanıyorum ve önemli bir sorun yaşamadım ancak testlerimde WPMU ile çok beklenmedik sonuçlar aldım, bu yüzden bunu ağ kurulumlarında kullanmaya dikkat edin.


uzun zaman geçti ama hatırlarsanız, bu beklenmeyen sonuç nedir?
Ünsal Korkmaz

Tamamen hatırlamıyorum. Sanırım işe yaramadı ve el ile işler yaptım çünkü çok fazla MS sitem yoktu.
jerclarke

bunu nasıl yürütebilirim? eğer doğrudan doğrudan çalıştırırsam, get_option tanımlanmadı ...
Janus Troelsen

Functions.php dosyasına bunu ekleyin ve çalışması gerekir, ancak o zaman bile her zaman işlevleri bir araya getirip "init" veya "wp" ye bağlamanız gerekir.
jerclarke

3

Wordpress WP Kodeksine göre eklentileri etkinleştirmek için bir işlev sunar

function plugin_activation( $plugin ) {
    if( ! function_exists('activate_plugin') ) {
        require_once ABSPATH . 'wp-admin/includes/plugin.php';
    }

    if( ! is_plugin_active( $plugin ) ) {
        activate_plugin( $plugin );
    }
}

plugin_activation('akismet/akismet.php');

Ethan, cevabımın nesi var?
Mowshon

Sadece kodu göndermek bir cevap için uygun olsa da, cevabınızı okuyan yeni programcılar için yorum yapmak zor olabilir. Bu sayede OP, kodunuzun nasıl çalıştığını daha iyi anlayabilir.
Ethan Jinks O'Sullivan,

0

WordPress varsayılan işlevini çağırabilirsiniz.

activate_plugin('akismet/akismet.php');

Daha fazla ayrıntı için lütfen aşağıdaki bağlantıyı kontrol edin.

eklentiyi etkinleştir

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.