ตารางรายการผู้ดูแลระบบ WordPress: เพิ่มตัวกรองที่กำหนดเอง
เผยแพร่แล้ว: 2021-02-26ข้อมูลส่วนใหญ่ในเพจและโพสต์ของคุณใน WordPress Admin ถูกจัดเป็นตาราง ใครก็ตามที่ใช้ WordPress จะคุ้นเคยกับสิ่งเหล่านี้ พวกเขาทำงานได้ดีและช่วยให้คุณสามารถดำเนินการ 'แก้ไขด่วน' ของบางหน้าหรือข้อมูลโพสต์ แสดงวันที่โพสต์หรือหน้าถูกเผยแพร่และอื่น ๆ อีกมากมายนอกจากนี้ นอกจากนี้ คุณอาจสังเกตเห็นว่าคุณสามารถกรองตารางเหล่านี้ด้วยการเลือกเมนูแบบเลื่อนลงที่ปรากฏที่ด้านบนสุดของแต่ละตาราง
อย่างไรก็ตามมีตัวกรองเพียงไม่กี่ตัวเท่านั้น แล้วถ้าจะกรองค่าที่ไม่มีช่องกรองใน Admin ต้องทำอย่างไร? โชคดีที่ WordPress อนุญาตให้เราเพิ่มตัวกรองของเราเอง เราจะดูวิธีการ
เหตุใดจึงต้องใช้ตัวกรองแบบกำหนดเอง
เหตุใดคุณจึงต้องการตัวกรองที่กำหนดเองเพื่อจัดระเบียบตารางผู้ดูแลระบบใน WordPress? ลองนึกภาพว่าเรามีไซต์ที่มีผู้โพสต์จำนวนมากและมีโพสต์จำนวนมาก
คุณสามารถดูผู้เขียนโพสต์ได้จากตารางผู้ดูแลระบบโดยไม่ต้องแก้ไขใดๆ สิ่งที่คุณทำไม่ได้ในตอนนี้คือจัดเรียงโพสต์ตามผู้แต่ง เห็นได้ชัดว่านี่เป็นข้อจำกัดที่สำคัญหากคุณต้องการดูโพสต์ทั้งหมดที่เขียนโดยผู้เขียนคนใดคนหนึ่งได้อย่างง่ายดาย สิ่งที่จะช่วยได้คือถ้าคุณสามารถดูเมนูแบบเลื่อนลงของผู้แต่งโพสต์ทั้งหมด แล้วเลือกหนึ่งรายการจากรายการ ที่สามารถเร่งสิ่งต่าง ๆ ได้จริงๆ
มาดูกันว่าเราจะสร้างสิ่งนี้ได้อย่างไร
การสร้างตัวกรองแบบกำหนดเองของเรา
เพื่อช่วยคุณสร้างตัวกรองของคุณเอง WordPress ได้จัดเตรียม restrict_manage_posts
_manage_posts และ pre_get_posts
restrict_manage_posts
_manage_posts ถูกนำมาใช้ใน wp-admin/includes/class-wp-posts-list-table.php
รอบบรรทัด 557 และเริ่มทำงานก่อนที่ปุ่มตัวกรองจะถูกสร้างขึ้นเหนือรายการตารางผู้ดูแลระบบ
เราจะใช้ฟังก์ชันที่กำหนดเองและเชื่อมโยงกับข้อ จำกัด ของ restrict_manage_posts
_manage_posts ตามปกติ (ดูข้อมูลเพิ่มเติมที่นี่) ไปที่โฟลเดอร์หลักของธีมที่ใช้งานอยู่และเปิดไฟล์ functions.php
ด้วยโปรแกรมแก้ไขที่คุณชื่นชอบ ที่ส่วนท้ายของเนื้อหาของไฟล์ ให้ใส่รหัสด้านล่าง:
function my_author_filter(){ $screen = get_current_screen(); global $post_type; if( $screen->id == 'edit-post' ){ $my_args = array( 'show_option_all' => 'All Authors', 'orderby' => 'display_name', 'order' => 'ASC', 'name' => 'authors_admin_filter', 'who' => 'authors', 'include_selected' => true ); if(isset($_GET['authors_admin_filter'])){ $my_args['selected'] = (int)sanitize_text_field($_GET['authors_admin_filter']); } wp_dropdown_users($my_args); } } add_action('restrict_manage_posts','my_author_filter');
เงื่อนไขหลักที่เราใช้คือ if( $screen->id == 'edit-post')
ที่นี่เราใช้ get_current_screen()
ของ WordPress ซึ่งส่งคืนรหัสหน้าจอที่เราเปิดอยู่
ในกรณีนี้ ID หน้าจอผู้ดูแลระบบคือ 'แก้ไขโพสต์' กล่าวอีกนัยหนึ่ง เราต้องแน่ใจว่าเราอยู่ในหน้าจอการดูแลระบบโพสต์ ตัวอย่างเช่น หากเราต้องการใช้สิ่งนี้กับหน้าจอผู้ดูแลเพจที่เราควรใช้ if( $screen->id == 'edit-page'
หรือหากเราทำงานให้กับประเภทโพสต์ที่กำหนดเอง การ edit-{post_type}
จะเป็น คำสั่ง if ที่ถูกต้อง
หมายเหตุ: หากต้องการดูว่า ID ใดที่สอดคล้องกับหน้าจอผู้ดูแลระบบแต่ละหน้าจอ คุณสามารถตรวจสอบเอกสารอย่างเป็นทางการเกี่ยวกับการอ้างอิงหน้าจอผู้ดูแลระบบได้
ในโค้ดด้านล่าง เราจะตรวจสอบว่าได้เลือกผู้เขียนไว้แล้วหรือไม่ และหากเป็นเช่นนั้น เราจะใช้ค่าที่เลือก:

if(isset($_GET['authors_admin_filter'])){ $my_args['selected'] = (int)sanitize_text_field($_GET['authors_admin_filter']); }
สุดท้าย โดยใช้ฟังก์ชัน wp_dropdown_users
WordPress เราจะสร้างรายการแบบหล่นลงของผู้เขียนตามข้อโต้แย้งที่เรากำหนดไว้ก่อนหน้านี้
ต่อไป เราเลือกข้อความที่จะแสดงตัวเลือก 'show-all' ในอาร์กิวเมนต์ show_option_all
เราเลือกสตริง "ผู้เขียนทั้งหมด" ในอาร์กิวเมนต์ 'ชื่อ' เรากรอกชื่อที่ต้องการสำหรับรายการดรอปดาวน์ เราจะใช้ค่านี้ในภายหลังเพื่อกรองผลลัพธ์รายการโพสต์

ในอาร์กิวเมนต์ 'ใคร' เรากำหนดประเภทผู้ใช้ที่จะสืบค้น ในกรณีของเรา 'ผู้เขียน' ด้วยอาร์กิวเมนต์ 'include_selected' เราเลือกว่าเราต้องการรวม ID ผู้ใช้ที่เลือกไว้ในรายการแบบเลื่อนลงหรือไม่
ณ จุดนี้ หากคุณรีเฟรชหน้าจอโพสต์ของผู้ดูแลระบบ คุณจะเห็นเมนูแบบเลื่อนลงผู้เขียนถัดจากเมนูตัวกรองอื่นๆ ในตัว

หากคุณเลือกค่าและกด "ตัวกรอง" ค่าจะยังคงถูกเลือกเมื่อโหลดหน้าซ้ำ แต่ผลลัพธ์จะไม่เปลี่ยนแปลง ในขั้นตอนต่อไป เราจะทำการเปลี่ยนแปลงที่จำเป็นเพื่อกรองรายการโพสต์ให้แสดงเฉพาะโพสต์ที่เชื่อมโยงกับผู้เขียนที่เราเลือก
การกรองผลลัพธ์
อีกครั้ง ตัวกรอง pre_get_posts
จะทำงาน เราได้ตรวจสอบเบ็ดนี้ในบทความ WordPress Admin Search: การขยายผลลัพธ์ เราจะใช้สิ่งนี้อีกครั้งเพื่อแก้ไขออบเจ็กต์ตัวแปรการสืบค้นที่สร้างขึ้นในหน้าจอผู้ดูแลโพสต์ ก่อนที่จะเรียกใช้การสืบค้นจริง ใน functions.php
ของคุณให้แทรกบรรทัดต่อไปนี้:
function my_author_filter_results($query){ $screen = get_current_screen(); global $post_type; if ( $screen->id == 'edit-post' ) { if(isset($_GET['authors_admin_filter'])){ $author_id = sanitize_text_field($_GET['authors_admin_filter']); if($author_id != 0){ $query->query_vars['author'] = $author_id; } } } } add_action('pre_get_posts','my_author_filter_results');
เงื่อนไขหลักเช่นก่อนหน้านี้จำเป็นที่นี่เช่นกันเพื่อให้แน่ใจว่าเราอยู่ในหน้าจอโพสต์ของผู้ดูแลระบบ
$author_id = sanitize_text_field($_GET['authors_admin_filter']);
เก็บ ID ผู้เขียนที่เลือกไว้ในตัวแปร $author_id
หลังจากนี้ และหากรหัสผู้เขียนไม่ใช่ 0(ผู้เขียนทั้งหมดถูกเลือก) เราจะส่งค่า $author_id
ในพารามิเตอร์ผู้เขียนของข้อความค้นหา
และนั่นแหล่ะ ตอนนี้โพสต์ที่แสดงจะเป็นของผู้เขียน/รหัสผู้ใช้ที่เลือกเท่านั้น

บทสรุป
การกรองแบบกำหนดเองในหน้าจอผู้ดูแลระบบสามารถทำให้เนื้อหาของคุณค้นหาได้ง่ายโดยผู้ใช้ที่เป็นผู้ดูแลระบบ ซึ่งเป็นสิ่งที่มีค่ามากเมื่อคุณมีโพสต์หรือเพจจำนวนมาก และแน่นอน นี่เป็นเพียงวิธีเดียวที่เป็นไปได้ในการใช้ตัวกรองในตารางผู้ดูแลระบบ มีวิธีอื่นอีกมากมายที่คุณอาจพบว่ามีประโยชน์ และหวังว่าเทคนิคที่เราได้สรุปไว้ที่นี่จะช่วยคุณสร้างตัวกรองของคุณเอง
ตัวอย่างเช่น คุณอาจต้องการสร้างเมนูตัวกรองแบบเลื่อนลงพร้อมตัวเลือกเพื่อแสดงโพสต์ที่สร้างขึ้นในช่วง 30 วันที่ผ่านมา หรือบางทีอาจเป็นตัวกรองที่จัดเรียงโพสต์ตามการจัดหมวดหมู่ใดๆ รายการ query_vars สามารถช่วยคุณระดมความคิดถึงตัวเลือกที่เป็นไปได้!
ขอให้สนุกกับการเล่นด้วยคุณสมบัติที่ยอดเยี่ยมนี้!
ดูสิ่งนี้ด้วย
ตารางรายการผู้ดูแลระบบ WordPress: เพิ่มตัวกรองที่กำหนดเอง
เริ่มต้นใช้งาน WordPress Custom Fields