restrict_manage_posts eylem tetikler add_extra_tablenav()
İstediğiniz Liste Tablo için ek açılır eklemek nasıl olduğu, işlevi.
Aşağıdaki örnekte, önce Yazı Türünün doğru olduğundan emin olduktan sonra tablodaki competition_name
anahtar karşısında depolanan tüm DB değerlerini alıyoruz postmeta
(anahtar adını gerektiği gibi değiştirmeniz gerekir). Sorgu oldukça basittir ve yalnızca Rekabetin yayınlanıp yayınlanmadığını , yalnızca benzersiz değerleri alır (açılır menüde çoğaltma istemezsiniz) ve ardından bunları alfabetik olarak sıralar.
Sonra sonuçları kontrol ediyoruz (hiçbir şey için açılır liste çıktısı yok) ve sonra seçenekleri yapılandırıyoruz (tümünü gösterecek bir defualt dahil). Son olarak açılır liste çıktı.
Yorumumda belirtildiği gibi, bu hikayenin sonu değil; Liste Tablosuna yalnızca filtre etkinken istediğiniz sonuçları göstermesini bildirmek için bir mantığa ihtiyacınız olacak, ancak buna bir göz atmanız için sizi bırakacağım ve daha fazla yardıma ihtiyacınız olursa başka bir soruya başlayacağım. İpucu - dosyayı kontrol edin, /wp-admin/includes/class-wp-posts-list-table.php
üst dosya.../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
Ek açılır kutular eklemek için işlem kancasını kullanabilirsiniz. Yine de filtre için bir mantık eklemeniz gerektiğini unutmayın, çünkü WP kutunun dışında ne yapacağını bilemeyecektir (otomatik olarak işleyebileceği taksonomi açılır listelerinin aksine).