restrict_manage_postsการดำเนินการเรียกadd_extra_tablenav()
ฟังก์ชั่นซึ่งเป็นวิธีการที่คุณเพิ่มเมนูแบบเลื่อนลงเพิ่มเติมในรายการตารางที่คุณต้องการ
ในตัวอย่างด้านล่างอันดับแรกเราตรวจสอบให้แน่ใจว่าประเภทการโพสต์นั้นถูกต้องจากนั้นเรารับค่า DB ทั้งหมดที่เก็บไว้กับcompetition_name
คีย์ในpostmeta
ตาราง (คุณต้องเปลี่ยนชื่อคีย์ตามต้องการ) แบบสอบถามนั้นค่อนข้างง่ายและมีการตรวจสอบเพื่อดูว่าการแข่งขันมีการเผยแพร่หรือไม่ใช้ค่าที่ไม่ซ้ำกัน (คุณไม่ต้องการให้มีการทำซ้ำในเมนูแบบเลื่อนลง) จากนั้นสั่งให้เรียงตามลำดับตัวอักษร
ต่อไปเราจะตรวจสอบผลลัพธ์ (ไม่มีจุดที่แสดงรายการแบบเลื่อนลงเพื่ออะไร) จากนั้นสร้างตัวเลือก (รวมถึงค่าเริ่มต้นเพื่อแสดงทั้งหมด) ในที่สุดหล่นลงคือการส่งออก
ตามที่ระบุไว้ในความคิดเห็นของฉันนี้ไม่สิ้นสุดของเรื่องแม้ว่า; คุณจะต้องใช้เหตุผลบางอย่างเพื่อบอกตารางรายการให้แสดงผลลัพธ์ที่คุณต้องการเฉพาะเมื่อตัวกรองเปิดใช้งาน แต่ฉันจะให้คุณดูที่แล้วเริ่มคำถามอื่นถ้าคุณต้องการความช่วยเหลือเพิ่มเติม คำแนะนำ - ดูไฟล์/wp-admin/includes/class-wp-posts-list-table.php
และมันเป็นพาเรนต์.../wp-class-list-table.php
/**
* Add extra dropdowns to the List Tables
*
* @param required string $post_type The Post Type that is being displayed
*/
add_action('restrict_manage_posts', 'add_extra_tablenav');
function add_extra_tablenav($post_type){
global $wpdb;
/** Ensure this is the correct Post Type*/
if($post_type !== 'competition')
return;
/** Grab the results from the DB */
$query = $wpdb->prepare('
SELECT DISTINCT pm.meta_value FROM %1$s pm
LEFT JOIN %2$s p ON p.ID = pm.post_id
WHERE pm.meta_key = "%3$s"
AND p.post_status = "%4$s"
AND p.post_type = "%5$s"
ORDER BY "%3$s"',
$wpdb->postmeta,
$wpdb->posts,
'competition_name', // Your meta key - change as required
'publish', // Post status - change as required
$post_type
);
$results = $wpdb->get_col($query);
/** Ensure there are options to show */
if(empty($results))
return;
// get selected option if there is one selected
if (isset( $_GET['competition-name'] ) && $_GET['competition-name'] != '') {
$selectedName = $_GET['competition-name'];
} else {
$selectedName = -1;
}
/** Grab all of the options that should be shown */
$options[] = sprintf('<option value="-1">%1$s</option>', __('All Competitions', 'your-text-domain'));
foreach($results as $result) :
if ($result == $selectedName) {
$options[] = sprintf('<option value="%1$s" selected>%2$s</option>', esc_attr($result), $result);
} else {
$options[] = sprintf('<option value="%1$s">%2$s</option>', esc_attr($result), $result);
}
endforeach;
/** Output the dropdown menu */
echo '<select class="" id="competition-name" name="competition-name">';
echo join("\n", $options);
echo '</select>';
}
restrict_manage_posts
เบ็ดการกระทำเพื่อเพิ่มกล่องแบบเลื่อนลงเพิ่มเติม อย่าลืมว่าคุณต้องเพิ่มตรรกะบางอย่างสำหรับตัวกรองด้วยเนื่องจาก WP จะไม่รู้ว่าต้องทำอะไรกับตัวกรองนอกกรอบ (ซึ่งแตกต่างจากรายการแบบหล่นลงของ taxonomy ซึ่งสามารถจัดการได้โดยอัตโนมัติ)