after_setup_theme her zaman çalışır


11

Bazı fakülte üyelerim için bir çocuk teması oluşturuyorum ve temanın bir parçası olarak, temanın etkinleştirildiği sırada birkaç eklentinin etkinleştirilmesini istiyorum. Doğal olarak, after_setup_theme eylemini kullandım ve kurulum işlevimi çağırdım. HER istek üzerine (admin ve başka türlü) çalıştırılması dışında harika çalışır. Bunu kurulum işlevinin sonuna ekleyerek bunu kanıtladım:

echo '<script type="text/javascript">alert("This action was run")</script>';

Ve sonuç olarak her yönetici isteği ve her ön uç isteği üzerinde bir javascript uyarısı al (Bir ağ kurulumum var, bu yüzden bu temanın aktif olmadığı sitelerde, işlevi çalıştırmıyor)

Yani soru şu, bu bir hata mı? Bir şekilde yanlış bir şey mi yapıyorum? İşte kullanıyorum tam kodu:

add_action( 'after_setup_theme', 'fwp_setup' );
function fwp_setup(){
    // -- Unrelated code remove for the sake of brevity 
    require_once($_SERVER['DOCUMENT_ROOT'].'/wp-admin/includes/plugin.php');
    activate_plugin('enable-media-replace/enable-media-replace.php');
    activate_plugin('seo-image/seo-friendly-images.php');
    activate_plugin('w3-total-cache/w3-total-cache.php');
    echo '<script type="text/javascript">alert("This action was run")</script>';
}

Herhangi bir fikir çok takdir edilecektir!


ÇÖZÜM: after_switch_themetam olarak burada istediğim şeyi yapıyor. Tema temanıza geçtikten sonra tetiklenir. Aşağıda belirtilen çözümlerden biri kullanılmaktadır switch_theme. Bu, istenen temaya sahip değildir, çünkü yalnızca temanızdan uzaklaştığınızda olur. Bu Trac yorumuna referans ver
Aaron Wagner

lütfen bunu sorunuza yorum yapmak yerine cevap olarak gönderin. :)
Chip Bennett

2
Özür. Bunu henüz yapmama izin vermedi. Biraz cevap olarak ekleyeceğim.
Aaron Wagner

Yanıtlar:


8

ÇÖZÜM: after_switch_themetam olarak burada istediğim şeyi yapıyor. Tema temanıza geçtikten sonra tetiklenir. Aşağıda belirtilen çözümlerden biri kullanılmaktadır switch_theme. Bu, istenen temaya sahip değildir, çünkü yalnızca temanızdan uzaklaştığınızda olur.

İşte referans olarak bulduğum bir makale: http://core.trac.wordpress.org/ticket/7795#comment:29

İşte değiştirilmiş kodum

add_action( 'after_switch_theme', 'fwp_theme_setup' );
function fwp_theme_setup(){ 
    require_once($_SERVER['DOCUMENT_ROOT'].'/wp-admin/includes/plugin.php');
    activate_plugin('enable-media-replace/enable-media-replace.php');
    activate_plugin('seo-image/seo-friendly-images.php');
    activate_plugin('w3-total-cache/w3-total-cache.php');
}

5

after_setup_themeEylem olduğunu amaçlanan Her WordPress yüküne ateşe. WordPress'in şablon sistemini çağırdığı, Tema için çeşitli kurulum parametrelerini belirlediği ve ardından görüntülenecek doğru şablonu belirleme gibi sonraki işlemlerle devam eden sürecin bir parçasıdır.

Başka bir deyişle, after_setup_themetemsilci, WordPress'in geçerli Temayı kurduğu noktayı temsil eder , yöneticinin geçerli Temayı etkinleştirdiği ve / veya yapılandırdığı noktayı temsil etmez .

Aradığınız şey şu anda mevcut olmayan, ancak dikkate alınan / geliştirilmekte olan bir Tema etkinleştirme kancasıdır .


Codex giriş bağlantısı o zaman çok yanıltıcı. "Bu kanca, temaların başlatılması sırasında çağrılır." Bu, bana göre, kanca etkinleştirildiğinde çağrılmalıdır. Ne dediğini anlıyorum. Çok yanıltıcı.
Aaron Wagner

5
init !== activation. Normalde __construct()php initişlevi de bir işlev çağırır . Bunun anlamı: Örneği başlat.
kaiser

Trac bileti 7 yaşında ve sabit olmayacak gibi görünüyor!
numediaweb

4

Maalesef tema etkinleştirme kancası yok. Ancak, bu soru bunun için bir çözüm sağlar.

Eklentileri etkinleştirmek için 'tema etkinleştirme kancasını' kullanmanız yeterlidir.

Aynı damar boyunca daha iyi bir çözüm budur . Her ikisi de esasen switch_themekancayı kullanır .


OP yorum ve bağlantılı trac bilet göre - after_switch_themegerekli kanca olduğunu.

Bu, eski temanın adını argüman olarak iletir. Ancak, bu sizin içindeyse functions.php(ki ... olmalıdır) geri arama yalnızca temanız etkinleştirildiğinde tetiklenir .

add_action( 'after_switch_theme', 'wpse50298_setup' );
function wpse50298_setup($theme_switching_from){
    // Your theme is being activated
}

Benzer şekilde switch_theme, yalnızca temanız devre dışı bırakıldığında çağrılacak bir geri arama ekleyin .

add_action( 'switch_theme', 'wpse50298_deactivate' );
function wpse50298_deactivate($theme_switching_to){
    // Your theme is being deactivated
}

Bu seçeneklerin hiçbiri benim için işe yaramadı. switch_themeyalnızca temayı devre dışı bıraktıktan sonra çalıştı. Ancak, after_switch_thememükemmel çalıştı.
Aaron Wagner

1
güncellenmiş cevap :)
Stephen Harris

switch_theme artık çalışmıyor gibi görünüyor. 3.4 aktivasyonundaki değişikliklerden kaynaklandığını düşünüyorum. En azından benim için çalışmıyor.
Jake

after_switch_theme mükemmel çalışıyor. Bu kabul edilen cevap olmalı. WP 3.5 kullanıyorum
Ardee Aram

0

Thomas Griffin'in eklenti aktivasyon betiğini kullanmak daha iyi bir çözüm olabilir . Bu, kullanıcılardan tema kullanımdayken seçtiğiniz eklentileri yüklemelerini ister. Bu eklentiyi temadan ayırmanın ve yine de kullanmanın harika bir yolu olduğunu düşünüyorum.

Temanız içinde, eklentiyi işlevlerini kullanmadan önce etkin olup olmadığını kontrol edin. Bu, kullanıcılara daha fazla seçenek ve kontrol sağlayacaktır.

Aktivasyon komut dosyasını Knapsack ile kolayca ayarlayabilirsiniz .



0

En iyi düzeltme, şimdi switch_themegeçerli olup olmadığını görmek için geçirilen '$ theme' argümanını kanca kullanmak ve filtrelemek olacaktır.

function nw_update_network($theme) {
   if ($theme !== 'my_theme_name') return;

   // Your code here
}

add_action('switch_theme', 'nw_update_network');
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.