Intereting Posts
Получены ли плагиновые переводы, автоматически установленные в WordPress? Единый обратный вызов с несколькими полями настройки Область администратора не загружается должным образом Таксономия Родительское имя На вкладке «Коммерция» отсутствует страница «Плагины» при попытке обновления типов 1.7 Сортируемые столбцы администратора, когда данные не поступают из post_meta Правильное регулярное выражение для wp_embed_register_handler Как показать содержимое определенного элемента на той же странице? Не могу понять, почему файл jquery не загружается! Не удалось загрузить файлы скриптов в wordpress! я не могу понять, что я делаю неправильно Сценарий не загружается через класс плагина Изменение размера изображения в зависимости от страницы Перекодировка category-template.php для перехода на пользовательский URL-адрес Как удалить версию WordPress из некоторых файлов .css / .js добавление пользовательского скрипта в файл функций

Как установить выбранный атрибут на параметр после запроса фильтра?

Я работаю над фильтром администратора для настраиваемого типа сообщений и в основном работаю. Тем не менее, я застрял на одном месте. Как я могу сохранить выбранную опцию видимой пользователю после запроса фильтра?

Я посмотрел на wp_dropdown_categories (который я использовал в другом фильтре), и это, похоже, не соответствует моему делу. В этом случае фильтр относится к запросу базы данных. Это то, что у меня есть до сих пор.

 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>"; } } 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; } return $query; }; add_filter('parse_query', 'query_posts_by_status'); 

Хорошо – это не самый красивый способ решить это, но это то, что я придумал. Использование комбинации хранения сеанса и небольшого javascript.

Сначала я добавил session_start() в начало моего файла. Затем в query_posts_by_status я добавил $_SESSION['request_status'] = $request_status . Это дало мне доступ к глобальной переменной $_SESSION . Наконец, я добавил немного javascript, как filter_forms_by_status ниже, в filter_forms_by_status .

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

Итак, мое полное решение для этого случая …

 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');