Các restrict_manage_posts hành động kích hoạt add_extra_tablenav()
chức năng, đó là cách bạn thêm Dropdowns thêm để mong muốn Danh sách Bảng của bạn.
Trong ví dụ bên dưới, trước tiên chúng tôi đảm bảo rằng Loại bài đăng là chính xác và sau đó chúng tôi lấy tất cả các giá trị DB được lưu trữ đối với competition_name
khóa trong postmeta
bảng (bạn phải thay đổi tên khóa theo yêu cầu). Truy vấn khá cơ bản và chỉ kiểm tra xem Cuộc thi có được công bố hay không, chỉ lấy các giá trị duy nhất (bạn không muốn sao chép trong danh sách thả xuống) và sau đó sắp xếp chúng theo thứ tự bảng chữ cái.
Tiếp theo, chúng tôi kiểm tra kết quả (không có điểm nào xuất hiện trong danh sách thả xuống không có gì), sau đó xây dựng các tùy chọn (bao gồm cả một định nghĩa để hiển thị tất cả). Cuối cùng, thả xuống là đầu ra.
Như đã nêu trong nhận xét của tôi, đây không phải là kết thúc của câu chuyện; bạn sẽ cần một số logic để báo cho Bảng danh sách chỉ hiển thị kết quả mong muốn của bạn khi bộ lọc hoạt động, nhưng tôi sẽ để bạn xem xét điều đó và sau đó bắt đầu một câu hỏi khác nếu bạn cần hỗ trợ thêm. Gợi ý - kiểm tra tệp /wp-admin/includes/class-wp-posts-list-table.php
và đó là cha mẹ.../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
hook hành động để thêm các hộp thả xuống bổ sung. Đừng quên rằng bạn cũng phải thêm một số logic cho bộ lọc, vì WP sẽ không biết phải làm gì với nó ngoài hộp (không giống như danh sách thả xuống phân loại, có thể tự động xử lý).