Tindakan pembatasan_manage_posts memicu add_extra_tablenav()
fungsi, yaitu bagaimana Anda menambahkan dropdown tambahan ke Daftar Tabel yang Anda inginkan.
Dalam contoh di bawah ini, pertama-tama kita memastikan bahwa Jenis Posting sudah benar, dan kemudian kita ambil semua nilai DB yang disimpan terhadap competition_name
kunci dalam postmeta
tabel (Anda harus mengubah nama kunci seperti yang diperlukan). Permintaannya cukup mendasar dan hanya memeriksa untuk melihat apakah Kompetisi diterbitkan, hanya mengambil nilai unik (Anda tidak ingin duplikasi dalam dropdown) dan kemudian memesannya secara alfabet.
Selanjutnya kita periksa hasilnya (tidak ada gunanya mengeluarkan dropdown untuk apa-apa), dan kemudian membangun opsi (termasuk defualt untuk menampilkan semua). Akhirnya dropdown adalah output.
Seperti yang dinyatakan dalam komentar saya, ini bukan akhir dari cerita; Anda akan memerlukan beberapa logika untuk memberi tahu Daftar Tabel untuk hanya menampilkan hasil yang Anda inginkan ketika filter aktif, tetapi saya akan membiarkan Anda melihatnya dan kemudian memulai pertanyaan lain jika Anda memerlukan bantuan lebih lanjut. Petunjuk - lihat file tersebut /wp-admin/includes/class-wp-posts-list-table.php
, dan itu adalah induknya.../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
kait tindakan untuk menambahkan kotak dropdown tambahan. Jangan lupa bahwa Anda juga harus menambahkan beberapa logika untuk filter, karena WP tidak akan tahu apa yang harus dilakukan dengan itu di luar kotak (tidak seperti daftar dropdown taksonomi, yang dapat ditangani secara otomatis).