ตารางรายการผู้ดูแลระบบ WordPress: เพิ่มตัวกรองที่กำหนดเอง

เผยแพร่แล้ว: 2021-02-26

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

อย่างไรก็ตามมีตัวกรองเพียงไม่กี่ตัวเท่านั้น แล้วถ้าจะกรองค่าที่ไม่มีช่องกรองใน Admin ต้องทำอย่างไร? โชคดีที่ WordPress อนุญาตให้เราเพิ่มตัวกรองของเราเอง เราจะดูวิธีการ

เหตุใดจึงต้องใช้ตัวกรองแบบกำหนดเอง

เหตุใดคุณจึงต้องการตัวกรองที่กำหนดเองเพื่อจัดระเบียบตารางผู้ดูแลระบบใน WordPress? ลองนึกภาพว่าเรามีไซต์ที่มีผู้โพสต์จำนวนมากและมีโพสต์จำนวนมาก

โฮสต์เว็บไซต์ของคุณด้วย Pressidium

รับประกันคืนเงิน 60 วัน

ดูแผนของเรา

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

มาดูกันว่าเราจะสร้างสิ่งนี้ได้อย่างไร

การสร้างตัวกรองแบบกำหนดเองของเรา

เพื่อช่วยคุณสร้างตัวกรองของคุณเอง 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