How to set selected attribute on option after filter query?

Ok – it’s not the prettiest way to solve this, but this is what I came up with. Using a combination of session storage and a little javascript.

First – I added session_start() to the beginning of my file. Then in query_posts_by_status I added $_SESSION['request_status'] = $request_status. This gave me access to the global $_SESSION variable. Last, I added a little javascript as follows to filter_forms_by_status.

<script>
  var statusFilter = document.getElementById('status-filter');
  var filter = "<?php echo $_SESSION['request_status'] ?>";
  statusFilter.value = filter;
</script>

So, my complete solution for this case is…

start_session(); // at top of file.
function filter_forms_by_status() {
    global $post_type;
    global $wpdb;

    if ($post_type != 'request_form') {
        return;
    } else {
        $query = "
            SELECT DISTINCT post_name
            FROM $wpdb->posts
            WHERE post_title LIKE 'request_status'
        ";

        $result = $wpdb->get_row($query, ARRAY_N);
        $field_object = get_field_object($result[0]);
        $status_array = $field_object['choices'];

        echo "<select class="postform" id='status-filter' name="status">";
        foreach ($status_array as $status_key => $status) {
            echo "<option value=$status_key>$status</option>";
        }
        echo "</select>";
    }
    ?>
        <script>
            var statusFilter = document.getElementById('status-filter');
            var filter = "<?php echo $_SESSION['request_status'] ?>";
            statusFilter.value = filter;
        </script>
    <?php
}
add_action('restrict_manage_posts', 'filter_forms_by_status');

function query_posts_by_status($query) {
    global $pagenow;
    if (is_admin() && $pagenow == 'edit.php') {
        $request_status = $_GET['status'];

        $query->query_vars['meta_key'] = 'request_status';
        $query->query_vars['meta_value'] = $request_status;
        $_SESSION['request_status'] = $request_status;
    }
    return $query;
};
add_filter('parse_query', 'query_posts_by_status');