add_action (), add_filter () sebelum atau sesudah fungsi

18

Saat mencari melalui cuplikan / tutorial / plugin WordPress saya sering melihat add_action()dan add_filter()ditempatkan sebelum fungsi tersebut dinyatakan:

add_action( 'publish_post', 'email_friends' );

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

Dari sudut pandang logika, ini tidak masuk akal bagi saya. Mengapa Anda menempatkan fungsi setelah dipanggil dalam kode Anda? Ini biasanya bagaimana saya akan menangani situasi yang sama:

function email_friends( $post_ID )  {
   $friends = '[email protected], [email protected]';
   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' );

Saya tahu kedua skenario berfungsi, tetapi apakah ada keunggulan khusus untuk satu atau yang lain? Sekitar 90% dari waktu saya melihat skenario pertama sedang digunakan, sehingga membuat saya percaya ada manfaatnya.

voodooGQ
sumber

Jawaban:

13

Hal ini lebih mudah untuk membaca: Ketika adalah apa yang disebut? Jika Anda men-debug sebuah hook, Anda dapat segera melihat apakah Anda harus membaca fungsinya atau tidak: Jika itu bukan hook Anda, Anda dapat melewati kode.

Dalam tema dan plugin saya, saya menggabungkan semua pendaftaran untuk tindakan, filter, dan kode pendek di bagian atas dan saya menambahkan kait ke blok PHPDoc:

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

/**
 * Foo you!
 *
 * @wp-hook wp_head
 * @return  void
 */
function foo()
{
    print '<!-- foo -->';
}
fuxia
sumber
2
Meskipun saya tidak setuju (Hanya karena preferensi pribadi saya dan praktik pengkodean sebelumnya) bahwa lebih mudah untuk membaca ini masuk akal mengapa itu dilakukan dengan cara ini.
voodooGQ
6

Sebenarnya tidak ada perbedaan nyata, saya misalnya lebih suka mengikuti skenario pertama, karena lebih baik untuk menempatkan panggilan di satu tempat, dan mendefinisikan fungsi di bawahnya. PHP mem-parsing seluruh dokumen sebelum menjalankan apa pun, dan jika fungsi-fungsi didefinisikan dengan benar, semuanya akan bekerja secara normal, tidak ada keuntungan dalam skenario mana pun.

Saya percaya pepatah di sini adalah: Apa pun yang mengapung perahu Anda :)

OriginalEXE
sumber
Ini berfungsi bukan karena PHP mem-parsing seluruh dokumen, tetapi karena call_user_func_array()(kemungkinan besar) dipanggil setelah definisi fungsi Anda saat menjalankan do_action. Jadi, Anda dapat mendefinisikan fungsi terkait di mana saja hingga saat itu.
kovshenin
1

4 tahun kemudian, tapi saya yakin itu akan membantu orang-orang datang ke sini dari pencarian.

Seperti yang dinyatakan orang lain, tidak ada perbedaan karena php mem-parsing seluruh dokumen dan mengeksekusi dalam urutan yang benar. Jadi, apa pun yang Anda suka.

Saya pribadi suka gaya pertama:

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

Saya cenderung berpikir mundur. Berorientasi tujuan jika Anda mau. Jadi saya suka membaca, "kita sedang melakukan function bar, di hook. Oke keren, sekarang, apa fungsinya?"

Ini mengatur konteks untuk fungsi yang lebih baik. Tentu ini hanya preferensi pribadi saya. Jadi lakukan apa yang kamu suka.

John_911
sumber