ความแตกต่างระหว่าง do_action และ add_action


20

คำถามนี้อาจผิดฉันไม่แน่ใจ เพราะฉันไม่ชัดเจนในเรื่องนี้

ฉันรู้ว่าadd_actionมันใช้เพื่อเชื่อมโยงฟังก์ชันของเรากับฟังก์ชันที่ระบุ ยกตัวอย่างเช่นadd_action('wp_head'.'myfunc');ในขณะนี้สิ่งที่เคยอยู่ในรหัสจะถูกดำเนินการในmyfunc wp_head()ชัดเจน แต่ฉันสงสัยdo_actionว่ามันทำอะไร?

ฉันคิดว่ามันถูกใช้เพื่อสร้าง hook ของเราเองเช่น hooks ที่มีอยู่แล้ว (wp_head, wp_footer, ฯลฯ .. ) ถ้าฉันถูกต้องทุกคนสามารถแสดงคำตอบที่เข้าใจง่ายพร้อมตัวอย่างง่ายๆ

ฉันลองใช้ความแตกต่างทางอินเทอร์เน็ต แต่ทุกคนก็ชี้ไปที่ความแตกต่างระหว่าง add_action และ add_filter ฉันไม่ต้องการไปที่นั่นเพราะก่อนอื่นฉันต้องการชี้แจงเรื่องนี้แล้วฉันจะย้ายไปที่นั่น

ใครช่วยฉันได้บ้าง

แก้ไขหลังจากโพสต์คำถาม

function custom_register()
{
    echo '<script>jQuery(document).ready(function(){alert("Learning Hooks");});</script>';

}
do_action('custom');

add_action('custom','custom_register');

ฉันลองสิ่งนี้ในปลั๊กอิน แต่ฉันไม่ได้รับข้อความแจ้งเตือน

แต่เมื่อฉันขอฟังก์ชั่นเดียวกันกับwp_headมันก็ทำงานได้ดี

/******************working****************/
add_action('wp_head','custom_register');

จะเกิดอะไรขึ้นเมื่อคุณโทรติดต่อdo_action('custom'); หลังจากลงทะเบียนติดต่อกลับ และตรวจสอบให้แน่ใจว่ามีการโหลด jQuery
fuxia

ฉันไม่ได้รับข้อความแจ้งเตือนที่ด้านหลังหรือส่วนหน้า
อาทิตย์

โหลด jQuery แล้ว เมื่อฉันขอฟังก์ชั่นเดียวกันกับwp_headมันทำงานได้ดี แต่ไม่ใช่กับcustom
อาทิตย์

อาทิตย์ฉันเชื่อว่าคำถามดั้งเดิมของคุณได้รับการตอบโดย toscho และคุณควรทำเครื่องหมายว่าแก้ไขแล้ว แก้ไข # 3 # 4 ที่คุณเคยทำมาเป็นของในคำถามใหม่
brasofilo

คำตอบ:


13

ใช้do_action( 'unique_name' )เพื่อสร้างการกระทำของคุณเอง

คุณสามารถใช้สิ่งนั้นเพื่อเสนอAPI สำหรับปลั๊กอินของคุณดังนั้นปลั๊กอินอื่น ๆ สามารถลงทะเบียนการเรียกกลับสำหรับการกระทำที่กำหนดเองของคุณ ตัวอย่าง: ฉันต้องโทรหา do_action ในปลั๊กอินหรือไม่?

แต่คุณสามารถใช้การกระทำที่กำหนดเอง (หรือตัวกรอง) ในชุดรูปแบบได้เช่นกัน ตัวอย่าง: วิธีปฏิบัติที่ดีที่สุดในการนำส่วนที่กำหนดเองไปใช้ในธีม WordPress

และคุณสามารถรวมทั้งสองอย่างเพื่อทำให้ปลั๊กอินและชุดรูปแบบทำงานร่วมกันได้ ตัวอย่าง: วิธีการทำวิธีการจากปลั๊กอินที่มีอยู่ในชุดรูปแบบ?

สรุป: add_action( 'foo' )ลงทะเบียนการโทรกลับdo_action( 'foo' )ดำเนินการเรียกกลับที่ลงทะเบียนแล้ว


ขอบคุณสำหรับความช่วยเหลือที่ฉันได้รับส่วนใหญ่มีวัตถุประสงค์เพื่อ API ฉันลองตัวอย่าง แต่ไม่ได้ผลคุณสามารถหาปัญหาได้หรือไม่ ตรวจสอบการแก้ไข @toscho ของฉัน
อาทิตย์

เราสามารถพูดได้ว่านี่เป็นอีกกรณีหนึ่งเหมือนมรดก มุ่งมั่นในการขยายและเอาชนะชั้นเรียนที่เรากำลังทำเช่นนี้ ถูกต้องหรือไม่
อาทิตย์

@sun อืมใช่ แต่คุณสามารถรวมทั้งสองวิธีเข้าด้วยกันพวกเขาไม่ได้เกิดร่วมกัน
fuxia

1

นี่คือการเดาของฉันดังนั้นถ้าคุณรู้ดีกว่าโปรดแสดงความคิดเห็นเพื่อให้ฉันสามารถอัปเดตการเดาของฉัน

รหัสปลั๊กอินของคุณจะถูกเรียกใช้งานมาก่อนwp_head()(ซึ่งเราสามารถสันนิษฐานได้ว่าจะเรียกใช้การกระทำที่เพิ่มเข้าไป) เมื่อคุณadd_action('wp_head','custom_register')คุณกำลังบอก PHP ว่าเมื่อใด (ในอนาคต) do_action('wp_head')จะถูกเรียกเพื่อโทรcustom_register()เช่นกัน เช่นเดียวกับการโทรของคุณadd_action('custom','custom_register')แต่เมื่อคุณเห็นในรหัสของคุณการโทรไปdo_action('custom')ยังได้ถูกดำเนินการแล้วและเมื่อมีการโทรแล้วก็ยังไม่มีการกระทำใด ๆ ที่เพิ่มเข้ามา นี่คือเหตุผลที่ Toscho ถามว่าเกิดอะไรขึ้นเมื่อคุณโทรdo_action('custom') หลังจากที่คุณลงทะเบียนการติดต่อกลับ คำตอบของคุณเกี่ยวกับส่วนหลังและส่วนหน้าไม่ชัดเจน หากคุณสลับสองบรรทัดสุดท้ายในรหัสต่อไปนี้ฉันคิดว่ามันจะทำงานได้:

function custom_register()
{
    echo '<script>jQuery(document).ready(function(){alert("Learning Hooks");});</script>';

}
do_action('custom');                    // This is called before it will have an effect.

add_action('custom','custom_register'); // Too late - do_action was already called.

0

do_action: ลงทะเบียนaction hookในขณะที่ add_action: เพิ่มฟังก์ชั่นการโทรกลับลงใน hook ที่ลงทะเบียนไว้

ตัวอย่าง

พิจารณาว่าคุณต้องการพิมพ์บางสิ่งก่อนหน้าแถบด้านข้างในเทมเพลตของคุณ

  1. คุณจะเพิ่มเบ็ดกระทำในแฟ้มแม่แบบของคุณผ่านทางindex.php<?php add_action('bp_sidebar_left'); ?>
  2. ในfunctions.phpไฟล์ของคุณคุณสามารถเพิ่มฟังก์ชั่นการโทรกลับไปที่ hook เพื่อพิมพ์สิ่งที่คุณต้องการ

add_action('bp_sidebar_left', 'bp_sidebar_left_cb'); function bp_sidebar_left_cb() { echo 'Hello World !'; }


-1

คุณต้องใช้สิ่งต่อไปนี้:

function custom_register()
{
    echo '<script>jQuery(document).ready(function(){alert("Learning Hooks");});</script>';

}
.

add_action('custom','custom_register'); // Too late - do_action was already called. 
do_action('custom');                    // This is called before it will have an effect

มันใช้งานได้สำหรับฉัน
user112289
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.