WP-CLI yaparken bir eklentinin yüklenmesini nasıl önleyebilirim?


13

Şu anda bu kodu ana eklentiler dosyasında kullanıyorum. Ancak bu eklenti benim değil, bu yüzden her zaman bu kodu eklemeden normal olarak yükseltmeyi tercih ederdim.

if ( defined( 'WP_CLI' ) && WP_CLI ) {
    exit;
}

Bu eklenti hatalar ürettiğinden ve wp-cli'nun doğru bir şekilde yürütülmesi için durduğundan bunu yapmam gerekiyor, bu yüzden eklentiyi wp-cli ile devre dışı bırakamıyorum, görevlerimi yapıyorum ve yeniden etkinleştiremiyorum.

if x then do not load plugin file xBir mu-eklentiden bir şey yapmamın bir yolu var mı ?

Yanıtlar:


13

WordPress'in eklentileri yüklemek için yaptığı ilk şeylerden biri, aktif eklentileri veritabanına kaydedildiği gibi elde etmektir:

$active_plugins = (array) get_option( 'active_plugins', array() );

Kullandığı get_option()için option_active_pluginsfiltreyi, etkin eklentilerin listesini anında değiştirmek için kullanabiliriz .

function wpse_301282_disable_plugin( $active_plugins ) {
    if ( defined( 'WP_CLI' ) && WP_CLI ) {
        $key = array_search( 'gravityforms/gravityforms.php', $active_plugins );

        if ( $key ) {
            unset( $active_plugins[$key] );
        }
    }

    return $active_plugins;
}
add_filter( 'option_active_plugins', 'wpse_301282_disable_plugin' );

gravityforms/gravityforms.phpDevre dışı bırakmak istediğiniz eklentinin dizin ve dosya adıyla değiştirin .

Buradaki sorun, eklentilerin yüklenmesini etkilemeye çalışmamızdır, bu yüzden bunu bir eklenti içinden yapamayız , çünkü çok geç. Tema da çok geç olurdu.

Neyse ki WordPress "Eklentileri Kullanmalı" dır. Bunlar, eklentilerden önce ve ayrı olarak yüklenen ve normal eklentiler listesinde görünmeyen eklentilerdir.

Bu kodu bir Zorunluluk Kullanmalı Eklentiye eklemek için yapmanız gereken tek şey bir wp-content/mu-pluginsdizin oluşturmak (zaten yoksa) ve içinde bu kodla bir PHP dosyası (herhangi bir şey olarak adlandırılabilir) oluşturmaktır. Eklenti başlığına veya başka bir şeye ihtiyacınız yok.

WordPress yüklendiğinde bu kod diğer tüm eklentilerden önce yüklenecek. Filtremiz yerinde olduğundan, WordPress devre dışı bırakmak istediğiniz eklentiyi yüklemek için etkin eklentilerin listesini aldığında, WP-CLI etkinse bu listeden filtrelenecektir.


Aynı fikri vardı ama bu işe yaramıyor. En azından yerel çevremde değil. get_option()Değer geçici / benzerlere kaydedildiğinde ve bu filtre atlandığında belki erken dönüyor olabilir? (Çoğu durumda işe yaramaz, yalnızca yönetici eklentisi ekranında gerçekten yürütülür)
kero

Hm. Kaynağa baktığımda ve option_filtrenin uygulanmamasının tek nedeninin bir değere sahip olmaması ve varsayılanı döndürmesi.
Jacob Peattie

Aslında durum buydu (aktif eklenti yok). Test ortamlarımı çok temiz tutmamalıyım ..
kero

1
Bunu kabul ettim çünkü benim durumumda ihtiyacım olan buydu. Genel --skip-plugin=xolarak wp-cli seçeneği bunu yapmanın daha iyi bir yolu olabilir.
NextGenThemes

15

skip-pluginsWP-CLI kullanırken ayrı eklentileri yüklememek için WP-CLI'daki seçeneği kullanabilirsiniz .

Komutta şu şekilde kullanabilirsiniz:

wp user list --skip-plugins=my-plugin

Veya bunu wp-cli.ymldosyanıza ekleyebilirsiniz :

skip-plugins:
- my-plugin

-1

Eklenti dir adını yeniden adlandırmak devre dışı bırakacaktır. Bazen bir eklentiyi [linux] geçici olarak devre dışı bırakmak için yaparım:

mv my-plugin-dir renamed-my-plugin-dir

OP, WP-CLI kullanırken sadece eklentiyi atlamak istiyor, aynı zamanda gerçekleşebilecek başka bir etkinlik için değil
Mark Kaplun
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.