How add custom drop down filter in WordPress wp_list_table?

WP_List_Table months_dropdown:

WP_List_Table::months_dropdown(string $post_type)   // It displays a dropdown for filtering items in the list table by month.

Full Source Code:
File: wp-admin/includes/class-wp-list-table.php

protected function months_dropdown( $post_type ) {
    global $wpdb, $wp_locale;
 
    if ( apply_filters( 'disable_months_dropdown', false, $post_type ) ) {
        return;
    }
   $months = apply_filters( 'pre_months_dropdown_query', false, $post_type );
 
    if ( ! is_array( $months ) ) {
        $extra_checks = "AND post_status != 'auto-draft'";
        if ( ! isset( $_GET['post_status'] ) || 'trash' !== $_GET['post_status'] ) {
            $extra_checks .= " AND post_status != 'trash'";
        } elseif ( isset( $_GET['post_status'] ) ) {
            $extra_checks = $wpdb->prepare( ' AND post_status = %s', $_GET['post_status'] );
        }
 
        $months = $wpdb->get_results(
            $wpdb->prepare(
                "
            SELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month
            FROM $wpdb->posts
            WHERE post_type = %s
            $extra_checks
            ORDER BY post_date DESC
        ",
                $post_type
            )
        );
    }
 
    $months = apply_filters( 'months_dropdown_results', $months, $post_type );
 
    $month_count = count( $months );
 
    if ( ! $month_count || ( 1 == $month_count && 0 == $months[0]->month ) ) {
        return;
    }
 
    $m = isset( $_GET['m'] ) ? (int) $_GET['m'] : 0;
    ?>
    <label for="filter-by-date" class="screen-reader-text"><?php echo get_post_type_object( $post_type )->labels->filter_by_date; ?></label>
    <select name="m" id="filter-by-date">
        <option<?php selected( $m, 0 ); ?> value="0"><?php _e( 'All dates' ); ?></option>
    <?php
    foreach ( $months as $arc_row ) {
        if ( 0 == $arc_row->year ) {
            continue;
        }
 
        $month = zeroise( $arc_row->month, 2 );
        $year  = $arc_row->year;
 
        printf(
            "<option %s value='%s'>%s</option>\n",
            selected( $m, $year . $month, false ),
            esc_attr( $arc_row->year . $month ),
            /* translators: 1: Month name, 2: 4-digit year. */
            sprintf( __( '%1$s %2$d' ), $wp_locale->get_month( $month ), $year )
        );
    }
    ?>
    </select>
    <?php
}

Leave a Reply

Your email address will not be published. Required fields are marked *