add_action (), fonksiyondan önce veya sonra add_filter ()


18

WordPress snippet'lerine / öğreticilerine / eklentilerine bakarken sık sık görüyorum add_action()ve add_filter()işlev bildirilmeden önce yerleştiriliyor:

add_action( 'publish_post', 'email_friends' );

function email_friends( $post_ID ) {
   $friends = 'bob@example.org, susie@example.org';
   mail( $friends, "sally's blog updated" , 'I just put something on my blog: http://blog.example.com' );
   return $post_ID;
}

Mantık açısından bu benim için bir anlam ifade etmiyor. Neden kodunuzda çağrıldıktan sonra işlevi yerleştirmelisiniz? Ben genellikle aynı durumla nasıl başa çıkacağım:

function email_friends( $post_ID )  {
   $friends = 'bob@example.org, susie@example.org';
   mail( $friends, "sally's blog updated" , 'I just put something on my blog: http://blog.example.com' );
   return $post_ID;
}

add_action( 'publish_post', 'email_friends' );

Her iki senaryonun da işe yaradığını biliyorum, ama biri ya da diğeri için belirli bir avantaj var mı? İlk senaryonun kullanıldığını gördüğüm zamanın yaklaşık% 90'ı, bu yüzden bunun bir şekilde bir yararı olduğuna inanmamı sağlıyor.

Yanıtlar:


13

: Daha kolay okunmasını zaman olduğu ne denir? Bir kancada hata ayıklama yapıyorsanız, işlevi okumak zorunda olup olmadığınızı hemen görebilirsiniz: Kancanız değilse, kodu atlayabilirsiniz.

Benim temalar ve eklentileri ben üstünde eylemler, filtreler ve kısa kod için tüm kayıtları birleştirmek ve ben PHPDoc bloğuna kancayı ekleyin:

add_action( 'wp_head',  'foo' );
add_action( 'shutdown', 'bar' );

/**
 * Foo you!
 *
 * @wp-hook wp_head
 * @return  void
 */
function foo()
{
    print '<!-- foo -->';
}

2
Her ne kadar (sadece kişisel tercihim ve geçmiş kodlama uygulamalarım nedeniyle) bunu okumanın daha kolay olduğunu neden bu şekilde yapıldığına dair bir anlam ifade etmese de.
voodooGQ

6

Aslında gerçek bir fark yok, örneğin ilk senaryoyu takip etmeyi tercih ediyorum, çünkü çağrıları tek bir yere yerleştirmek ve altındaki işlevleri tanımlamak daha düzenli. PHP, bir şey çalıştırmadan önce tüm belgeyi ayrıştırır ve işlevler doğru bir şekilde tanımlanırsa, her iki durumda da her şey normal şekilde çalışır.

İnanıyorum ki burada doğru söz: Teknenizde ne olursa olsun :)


PHP tüm belgeyi ayrıştırdığı için değil call_user_func_array(), (büyük olasılıkla) çalışırken işlev tanımınızdan sonra çağrıldığı için çalışır do_action. Böylece bağlanan işlevi o noktaya kadar herhangi bir yerde tanımlayabilirsiniz.
kovshenin

1

4 yıl sonra, ama eminim ki insanlar aramadan buraya gelmelerine yardımcı olacak.

Diğerlerinin de belirttiği gibi, php tüm belgeyi ayrıştırıp doğru sırada yürüttüğü için bir fark yoktur. Ne istersen.

Şahsen ilk stili seviyorum:

add_action(hook, bar);
function bar(){
    //code here
}

Geriye doğru düşünme eğilimindeyim. İsterseniz hedefe yönelik. Bu yüzden okumayı seviyorum, "İşlev çubuğunu, kancada yapıyoruz. Tamam, şimdi, işlev ne yapıyor?"

İşlev bağlamını daha iyi ayarlar. Tabii ki bu sadece benim kişisel tercihim. Yani ne istersen yap.

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.