Intereting Posts
Создание подкатегорий через php Каналы показывают, где должна быть страница Post archive Список всех слизней? Направление страницы на страницу под умолчанию Как сообщения и категории связаны друг с другом в wp 4.1.1? Как получить URL-адрес файла из медиа-библиотеки Программно менять шаблоны сообщений? WooCommerce – результаты на странице не работают после перезагрузки страницы Как показать значение конкретного ключа из вложенного массива? Функция определения меню WordPress Admin – это отдельный файл Как вывести параметр базы данных, который является массивом в массив get_posts? Как использовать пользовательскую предыдущую / следующую ссылку? Получение «Cookies заблокированы или не поддерживаются вашим браузером» на странице входа Подставляя значение через короткий код Лучший способ программно удалить категорию / термин из сообщения

Фильтровать по настраиваемому полю для пользовательского типа сообщения.

У меня есть пользовательский тип сообщения «Article», у которого есть специальная поля «проблема», которая является номером идентификатора типа «проблема», который я выбираю с помощью простого окна выбора.

Я хочу добавить раскрывающийся список проблем, чтобы отфильтровать список статей, найденный здесь:

edit.php?post_type=article 

Это возможно? Это что-то задокументировано? Я не смог найти документацию или примеры.

какие крючки существуют для фильтрации списков и добавления выбранных элементов управления фильтром?

Мне пришлось изменить максимальный ответ, чтобы заставить фильтр работать. Переименование объекта select_restrict_articles помешало ему некорректно фильтровать и удерживать элементы управления фильтрами на экране. posts_where фильтр и SQL-запрос для фильтрации.

 function restrict_articles_by_issue() { global $wpdb; $issues = $wpdb->get_col(" SELECT DISTINCT meta_value FROM ". $wpdb->postmeta ." WHERE meta_key = 'issue' ORDER BY meta_value "); ?> <label for="issue">Issues:</label> <select name="issue_restrict_articles" id="issue"> <option value="">Show all</option> <?php foreach ($issues as $issue) { ?> <option value="<?php echo esc_attr( $issue ); ?>" <?php if(isset($_GET['issue_restrict_articles']) && !empty($_GET['issue_restrict_articles']) ) selected($_GET['issue_restrict_articles'], $issue); ?>> <?php $issue = get_post($issue); echo $issue->post_title; ?> </option> <?php } ?> </select> <?php } add_action('restrict_manage_posts','restrict_articles_by_issue'); function posts_where( $where ) { if( is_admin() ) { global $wpdb; if ( isset( $_GET['issue_restrict_articles'] ) && !empty( $_GET['issue_restrict_articles'] ) && intval( $_GET['issue_restrict_articles'] ) != 0 ) { $issue_number = intval( $_GET['issue_restrict_articles'] ); $where .= " AND ID IN (SELECT post_id FROM " . $wpdb->postmeta ." WHERE meta_key='issue' AND meta_value=$issue_number )"; } } return $where; } add_filter( 'posts_where' , 'posts_where' ); 

Поместите следующий код в свою тему functions.php .

 function articlesIssuesRequestAdmin($request) { if( isset($_GET['issue']) && !empty($_GET['issue']) ) { $request['meta_key'] = 'issue'; $request['meta_value'] = $_GET['issue']; } return $request; } function articlesIssuesRestrictManagePosts() { global $wpdb; $issues = $wpdb->get_col(" SELECT DISTINCT meta_value FROM ". $wpdb->postmeta ." WHERE meta_key = 'issue' ORDER BY meta_value "); ?> <label for="issue">Issues:</label> <select name="issue" id="issue"> <option value="">Show all</option> <?php foreach ($issues as $issue) { ?> <option value="<?php echo esc_attr( $issue ); ?>" <?php if(isset($_GET['issue']) && !empty($_GET['issue']) ) selected($_GET['issue'], $issue); ?>><?php echo esc_attr($issue); ?></option> <?php } ?> </select> <?php } if( is_admin() && isset($_GET['post_type']) && $_GET['post_type'] == 'articles' ) { add_filter('request', 'articlesIssuesRequestAdmin'); add_filter('restrict_manage_posts', 'articlesIssuesRestrictManagePosts'); }