ความแตกต่างระหว่าง add_filter และ Apply_filters


17

ฉันค้นหาคำอธิบายที่เหมาะสมเกี่ยวกับความแตกต่างระหว่างadd_filter()และapply_filters()ที่นี่ แต่หาไม่พบ

ใครสามารถบอกฉันว่าข้อมูลหรือตรรกะที่ต้องพิจารณาก่อนที่จะใช้add_filterหรือapply_filtersในบริบทเดียว

นั่นทำให้การใช้สิ่งจำเป็นอย่างหนึ่งไม่ใช่สิ่งอื่น

  • ถูกต้องหรือไม่ที่add_filterเพิ่งเพิ่มฟังก์ชั่นไปยังคิวของฟังก์ชันที่รอดำเนินการกับตัวแปรและapply_filtersดำเนินการตามลำดับหรือไม่?

  • มันถูกต้องหรือไม่ว่าapply_filtersเมื่อเรียกด้วยอาร์กิวเมนต์ (ชื่อของฟังก์ชั่นที่จะเรียกใช้) จะดำเนินการฟังก์ชั่นนั้นก่อนที่คนอื่น ๆ ทั้งหมด (ถ้ามี) ในคิว?


2
เอกสารเกี่ยวกับที่มีอยู่ที่นี่และที่นี่ไม่ได้อธิบายอย่างเพียงพอสำหรับคุณ
t31os

3
ฉันคิดว่านี่เป็นคำถามที่ดีจริงๆ ในฐานะที่เป็น wordpress dev ใหม่นี้อาจเป็นแนวคิดที่สับสน
Shawn

คำตอบ:


26

ส่วนใหญ่ต่อไปนี้สามารถพบได้ในCodex :


apply_filters

ฟังก์ชั่นการโทรกลับที่แนบมากับตัวกรองเบ็ด$tagถูกเรียกโดยการเรียกฟังก์ชั่นนี้ ฟังก์ชั่นนี้สามารถใช้ในการสร้างตัวกรองเบ็ดใหม่โดยเพียงแค่เรียกฟังก์ชั่นนี้ด้วยชื่อของเบ็ดใหม่ที่ระบุโดยใช้พารามิเตอร์ $ แท็ก

$value = apply_filters( $tag, $value, $var_1, $var_2, ... );

ในสาระสำคัญ:
คุณสามารถใช้apply_filtersในการกรองที่กำหนด$value- ส่วนที่เกี่ยวกับค่าของตัวเองเช่นเดียวกับตัวแปรที่มีให้เลือกผ่าน $var_1$var_n


add_filter

ขอฟังก์ชั่นกับการกระทำของตัวกรองที่เฉพาะเจาะจง

add_filter( $tag, $function_to_add, $priority, $accepted_args );

ในสาระสำคัญ:
คุณใช้add_filterเพื่อขอฟังก์ชั่นที่กำหนดเองเพื่อดำเนินการตัวกรองที่กำหนด ( $tag) ซึ่งคุณอาจสร้างขึ้นโดยapply_filtersก่อนหน้า (หรือมันเป็นการกระทำตัวกรองในตัวหรือเกิดจากปลั๊กอิน / ชุดรูปแบบของคุณ)


ดังนั้นนี่คือตัวอย่างสมมติ :

function print_initials( $name ) {

    if ( ! is_string( $name ) ) {
        return;
    }

    $fragments = explode( ' ', $name );

    /**
     * Filter wether to print initials in reverse order.
     *
     * @param bool $reverse Print initials in reverse order?
     */
    if ( apply_filters( 'reverse_initials', FALSE ) ) {
        $fragments = array_reverse( $fragments );
    }

    foreach ( $fragments as $f ) {
        echo substr( $f, 0, 1 );
    }
}

print_initials( 'Some Guy' ); // outputs: SG

add_filter( 'reverse_initials', '__return_true' );

print_initials( 'Some Guy' ); // outputs: GS

ตอนนี้ถ้าเราเพิ่งเรียกฟังก์ชันของเราตามเดิมอักษรตัวแรกจะถูกพิมพ์จากซ้ายไปขวาเพราะนี่คือสิ่งที่เรากำหนดไว้ว่าเป็นพฤติกรรมเริ่มต้น

ครั้งที่สองเราได้รับชื่อย่อในลำดับย้อนกลับ - เนื่องจากฟังก์ชั่นตัวกรอง__return_trueซึ่งเชื่อมต่อกับการกระทำของตัวกรองของเราจะส่งคืนเสมอTRUEและทำให้ชื่อย่อถูกส่งออกจากขวาไปซ้าย


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