Tema aracılığıyla eklenti / eklenti eylemini devre dışı bırak


19

Google Analyticator eklentisini siteme yükledim . Ayrıca, akıllı telefon olmayan mobil tarayıcılar için tasarlanmış bir temayı sunmak için MobilePress eklentisini kullanıyorum . Bu tema için Mobil Cihazlar için Google Analytics'i ayarladım ve daha büyük bir js dosyasına çağrı içerdiğinden Analyticator eklentisini devre dışı bırakmak istiyorum.

İşlevler.php veya başka bir yöntem kullanarak bir eklentiyi devre dışı bırakmanın mümkün olup olmadığını bilen var mı?

Ben sayfaya fonksiyonları ekler kodu buldum inanıyorum, tüm eklentiyi devre dışı bırakmak mümkün değilse yürütmek için eylemleri durdurmak mümkün mü? Onları hiç şans olmadan doğrudan devre dışı bırakmaya çalıştım. Eklenti dosyasındaki kod:

add_action('wp_head', 'add_google_analytics', 999999);
add_action('init', 'ga_outgoing_links');

Bu eylemleri kaldırmaya çalıştım:

remove_action('wp_head','add_google_analytics',9999999);
remove_action('init', 'ga_outgoing_links');

Herhangi bir yardım büyük beğeni topluyor.


Bana gelince bu teknik olarak çalışıyor olmalı, bu yüzden bu kodu çalıştırma zamanlaması hakkında yanlış giden bir şey var (çok erken veya çok geç). Lütfen daha fazla bilgi verin.
Rarst

Evet, bunun da işe yarayacağını düşündüm. Ekleme / kaldırma işlemleri ile ilgili çok fazla deneyimim yok, bu yüzden daha fazla hata ayıklamak için nasıl emin değildim. EAMann'ın yanıtı işe yaramış olsa da, ne tür daha fazla bilgi arıyordunuz?
PNMG 15:11

Biraz kafam karıştı - iyi gitmesi gerekiyorsa eklentiyi normal yollarla devre dışı bırakmak daha kolay değil mi? Hangi EAMann'ın cevabı sadece kodla yapılır. Bazı koşullarda dinamik olarak devre dışı bırakılmasını istediğinizi
sanıyordum

Herhangi bir normal masaüstü tarayıcısı için wordpress'te ayarlanan düzenli bir temam var. Bu tema için GA eklentisini kullanmak istiyorum. Mobilepress eklentisi, kullanıcı aracısı dizesini almak için php kullanır ve akıllı telefona ya da akıllı telefona farklı bir tema sunar. GA eklentisinin JS'yi yalnızca bu tema için <head> içine koymasını devre dışı bırakmak için akıllı telefon dışı tema için function.php dosyasını kullanmak istedim. Diğer iki tema (masaüstü ve akıllı telefon) için hala etkinleştirilmesi gerekiyor. Bu açıklığa kavuşmaya yardımcı olur mu?
PNMG 15:11

Evet, ben de öyle düşünmüştüm. Ancak devre dışı bırakma eklentiyi kalıcı olarak devre dışı bırakır ve açıkça etkinleştirilene kadar kapalı kalır. Kullanım durumunuza uygun olduğunu görmüyorum.
Rarst

Yanıtlar:


25

WordPress bir eklentiyi etkinleştirdiğinde, activate_plugin()işlevi çağırır . Bu işlev eklentiyi sanal alan içinde etkinleştirir ve başarı durumunda başka bir yere yönlendirir. Birkaç yazar tarafından eklenti bağımlılıklarını programlı olarak etkinleştirmek için kullanılmıştır.

Başka bir işlev daha var deactivate_plugin(), bu da tersini yapıyor ... "devre dışı bırak" veya "devre dışı bırak" ı tıkladığınızda WordPress eklentileri nasıl devre dışı bırakıyor.

Yüklü bir eklentiyi devre dışı bırakmak için şunu arayın:

deactivate_plugins( '/plugin-folder/plugin-name.php' );

Veya aynı anda birden fazla eklentiyi devre dışı bırakmak için:

deactivate_plugins( array( '/first-plugin/first.php', '/second-plugin/second.php' ) );

Devre dışı bırakma kancalarını çağırmadan eklentileri devre dışı bırakmanızı sağlayan ikinci bir parametre (ilk olarak devre dışı bırakılacak eklentilerin bir dizesi veya dizisidir) vardır. Varsayılan olarak, false değerine ayarlıdır ve bu şekilde bırakmanızı öneririm. Herhangi bir nedenle devre dışı bırakmayı atlamak istemezseniz, şunları yaparsınız:

deactivate_plugins( '/plugin-folder/plugin-name.php', true );

Bu sadece eklentiyi kapatır, ancak eklentinin devre dışı bırakılması durumunda kayıtlı olduğu hiçbir şeyi tetiklemez. Eklenti, devre dışı bırakıldığında seçenekleri veya db tablolarını kaldırırsa, bu bilgileri korumak ve başka bir yerde kullanmak için bu "sessiz" devre dışı bırakmayı yapmak istersiniz.

  • WordPress aracılığıyla bir HitchHacker Kılavuzu'ndaki bazı belgeler

Harika bir cevap - ve sadece bir başkasıyla karşılaştırıldığında, diyelim ki, yakındaki bir yerde olabilecek "burada bir web sitesi" yanıtı yok.
editör

Function.php dosyasına yerleştirilen bu kod, eklentiyi yönetici içinde devre dışı bırakır ve böylece diğer iki temadan devre dışı bırakılır. Rarst'a dikkat çektiğin için teşekkürler. Sadece function.php dosyasının bulunduğu bir tema için devre dışı bırakmak istiyordum.
PNMG

Belirli bir sitede aynı anda yalnızca bir tema kullanıyorsunuz ... ancak temayı devre dışı bıraktıktan sonra eklentiyi yeniden etkinleştirmek istiyorsanız, bu da mümkündür.
EAMann

11

Bu, EAMann'ın yukarıdaki parlak cevabı sayesinde ve orijinal poster için de yararlı olabileceğini düşündüm ...

Kullanıcıların premium sürümü yüklediklerinde eklentimi devre dışı bıraktıklarından emin olmak için bir çözüme ihtiyacım vardı (potansiyel çakışmaları önlemek için). Daha önce durumunu is_plugin_active ile tespit ettim ve kullanıcılardan kapatmasını isteyen bir yönetici hata mesajı gösterdim. Bu çok daha yumuşak ...

function deactivate_plugin_conditional() {
    if ( is_plugin_active('plugin-folder/plugin-name.php') ) {
    deactivate_plugins('plugin-folder/plugin-name.php');    
    }
}
add_action( 'admin_init', 'deactivate_plugin_conditional' );

Not: register_activation_hook üzerinde çalışmadı, ancak admin_init bir cazibe gibi çalışıyor.


1
Sadece is_plugin_active'nin deactivate_plugins kancasında zaten kontrol edildiğinden emin olduğumdan emin olmak için tekrar yapmanıza gerek yok
Bryan Willis

1

İşte benim çözüm, böyle diğer eklentileri devre dışı bırakabilirsiniz bir eklenti oluşturmak:

/*
 * Plugin Name: Disable/Configure Plugins
 * Description: Lets you disable/configure plugins based on environment variables
 * Author:      Chris Sewell
 */

/**
 * Disable specified plugins in development environment.
 * 
 * This is a "Must-Use" plugin. Code here is loaded automatically before regular plugins load.
 * This is the only place from which regular plugins can be disabled programatically.
 * 
 * Place this code in a file in WP_CONTENT_DIR/mu-plugins or specify a custom location 

 * to "development" or "production" in each particular server/environment.
 */

/* Disable specified plugins in development environment */
if (((getenv('environment') == 'production') || (getenv('environment') == 'alpha')) == false) {
    $plugins = array(
        'w3-total-cache/w3-total-cache.php'
    );
    require_once(ABSPATH . 'wp-admin/includes/plugin.php');
    deactivate_plugins($plugins);
}

Bunu üretime aktarın, etkinleştirin, ardından veritabanını yerel geliştiricinize getirin.

Kaynak

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.