ตัวกรองและ hooks ใช้งานได้จริงใน WordPress อย่างไร
ฉันกำลังถามเกี่ยวกับบางสิ่งที่ก้าวหน้า มันใช้งานอย่างไรใน PHP? เช่นวิธีการรวบรวม hooks ทั้งหมดจากปลั๊กอินที่แตกต่างกันและ "แนบ" ไปยังแกนหลัก ฯลฯ
ตัวกรองและ hooks ใช้งานได้จริงใน WordPress อย่างไร
ฉันกำลังถามเกี่ยวกับบางสิ่งที่ก้าวหน้า มันใช้งานอย่างไรใน PHP? เช่นวิธีการรวบรวม hooks ทั้งหมดจากปลั๊กอินที่แตกต่างกันและ "แนบ" ไปยังแกนหลัก ฯลฯ
คำตอบ:
โดยทั่วไป " ปลั๊กอิน API " ซึ่งเรียกตัวกรองและฮุกประกอบด้วยฟังก์ชันต่อไปนี้:
apply_filters()
- ดำเนินการdo_action
- ดำเนินการapply_filters_ref_array()
- ดำเนินการdo_action_ref_array()
- ดำเนินการadd_filter()
- เพิ่มลงในสแต็กadd_action()
- เพิ่มลงในสแต็กโดยรวมแล้วมีสองสามกลม (อะไรในโลก WordPress) ที่เกี่ยวข้อง:
global $wp_filter, $wp_actions, $wp_current_filter, $merged_filters;
คนแรก$wp_filter
คือโลกArray
ที่มีชื่อตัวกรองทั้งหมดเป็น subarrays แต่ละ subarrays เหล่านั้นจะเก็บ subarrays ที่เรียกกลับภายใต้อาเรย์ลำดับความสำคัญมากยิ่งขึ้น
ดังนั้นเมื่อมีการเรียกใช้ฟังก์ชั่นการทำงาน WordPress จะค้นหาแถวต่างๆเหล่านั้นเพื่อหากุญแจที่มีชื่อนั้น จากนั้น callbacks ที่แนบมาจะได้รับการดำเนินการตามลำดับความสำคัญหลังจากนั้น สิ่งเดียวที่เกิดขึ้นข้างหน้าคือการเรียกกลับที่แนบมากับall
ตัวกรอง
เมื่อคุณเพิ่มการโทรกลับโดยใช้add_action
หรือadd_filter
ก่อนอื่นเวิร์ดเพรสจะคำนวณ ID "ที่ไม่ซ้ำ" เพื่อไม่ให้เขียนทับการโทรกลับที่แนบมา
$idx = _wp_filter_build_unique_id($tag, $function_to_add, $priority);
จากนั้นจะเพิ่มการโทรกลับไปที่global $wp_filter
สแต็ก:
$wp_filter[ $tag ][ $priority ][ $idx ] = array(
'function' => $function_to_add,
'accepted_args' => $accepted_args
);
ในขณะที่คุณสามารถเห็นอาร์เรย์ย่อยหลักคือ$tag
(หรือการกระทำ / ชื่อตัวกรอง) จากนั้นทุกอย่างจะถูกเรียกภายใต้ลำดับความสำคัญที่เฉพาะเจาะจงและจากนั้นสตริง "โทรกลับ / ID" ที่ไม่ซ้ำได้รับการใช้เป็นกุญแจสำคัญ
ต่อมาเมื่อตัวกรองได้รับการเรียก - เกิดขึ้นกับ$tag
/ action- / filter-name - อาร์เรย์จะได้รับการค้นหาและการเรียกกลับได้รับการเรียก ในขณะที่ใช้งานอยู่call_user_func_array
มันไม่สำคัญว่าจะมีอาร์กิวเมนต์จำนวนเท่าใดที่แนบมาด้วย WordPress แก้ปัญหาด้วยตัวเอง
foreach ( (array) current( $wp_filter[ $tag ] ) as $the_ )
{
call_user_func_array(
$the_['function'],
array_slice(
$args,
0,
(int) $the_['accepted_args']
)
);
}
Hooksจะรวมอยู่ในทั้งไฟล์หลักของ WordPress และบางไฟล์ในธีมหลัก ช่วยให้คุณสามารถเชื่อมโยงเนื้อหาในตำแหน่งเฉพาะในไฟล์
ตัวอย่างคือตะขอ wp_head ใน WordPress คุณสามารถใช้เบ็ดนี้ในชุดรูปแบบลูกของคุณเพื่อเพิ่มเนื้อหาในตำแหน่งนั้น '
ตัวอย่าง:
add_action('wp_head', 'add_content_to_head');
function add_content_to_head() {
echo 'Your Content';
}
ชุดรูปแบบพรีเมี่ยมบางตัวยังมีตะขอการกระทำที่คุณสามารถใช้ในชุดรูปแบบลูกเพื่อทำสิ่งเดียวกัน นี่คือแผนที่ภาพซึ่งรวมถึงแอคชั่นฮุคและตำแหน่งที่พวกเขาแสดงผลเนื้อหาของคุณในเฟรมเวิร์กชุดรูปแบบ Genesis
ตัวอย่าง:
add_action('genesis_header', 'add_content_to_header');
function add_content_to_header() {
echo 'Your Content';
}
นี่คือลักษณะของ hook หากคุณเปิดไฟล์ header.php ในเฟรมเวิร์กชุดรูปแบบ Genesis:
do_action( 'genesis_header' );
นี่คือรายการของ WordPress hooks ที่คุณสามารถใช้ได้หลายวิธี
ตัวกรองช่วยให้คุณสามารถปรับเปลี่ยนการส่งออกของฟังก์ชั่นที่มีอยู่และรวมอยู่ในไฟล์หลักของ WordPress และเฟรมเวิร์กธีมหลักบางอย่างเช่น Genesis
นี่คือรายการตัวกรองที่คุณสามารถใช้กับ Genesis Design Framework
นี่คือรายการของตัวกรองที่รวมอยู่ใน WordPress
นี่คือตัวอย่างของวิธีที่คุณสามารถใช้ตัวกรองในเฟรมเวิร์กชุดรูปแบบเช่น Genesis:
add_filter( 'comment_author_says_text', 'custom_comment_author_says_text' );
function custom_comment_author_says_text() {
return 'author says';
}
รหัสข้างต้นสามารถนำมาใช้ในชุดรูปแบบของเด็ก ๆ ในการปรับเปลี่ยนผู้เขียนพูดข้อความในความคิดเห็นของคุณ มันใช้งานได้ในทุกรูปแบบ
นี่เป็นอีกตัวอย่างที่กำหนดความยาวของข้อความที่ตัดตอนมาถึง 50 คำ:
add_filter( 'excerpt_length', 'change_excerpt_length' );
function change_excerpt_length($length) {
return 50;
}
คุณจะพบฟังก์ชัน the_excerpt () ในไฟล์ wp- include / post-template.php
นี่คือสิ่งที่ดูเหมือนว่า:
function the_excerpt() {
echo apply_filters('the_excerpt', get_the_excerpt());
}
คุณยังสามารถใช้ hooks และตัวกรองในปลั๊กอินเพื่อทำสิ่งเดียวกันและรหัสจะไม่สูญหายเมื่อคุณอัปเดตธีมหลักหรือ WordPress
โดยทั่วไป hooks และตัวกรองช่วยให้คุณสามารถปรับแต่งและแก้ไขทั้ง WordPress และธีมหลักของคุณโดยไม่ต้องแก้ไขไฟล์ WordPress หลักหรือไฟล์ธีมหลักของคุณ
มันง่ายกว่ามากในการปรับแต่งธีมลูกเมื่อเฟรมเวิร์กของพาเรนต์ธีมมี hooks และตัวกรองเพราะคุณไม่จำเป็นต้องแก้ไขไฟล์เท็มเพลตธีมหลัก วิธีนี้คุณสามารถเปลี่ยนธีมได้อย่างปลอดภัยเช่นกัน