Дополнительный фильтр в админку WordPress edit.php

Привет друзья! Сегодня хочу рассказать вам о том, как можно фильтровать записи, страницы и пользовательские типы в админке WordPress. Речь о странице, которую мы открываем по ссылке ваш_сайт/wp-admin/edit.php.

Для обычных пользователей эти действия не сильно нужны, так что обойдемся без длительных вступлений и инструкций. Ниже я приведу код, который позволяет добавить фильтр в админку WP, а также краткие инструкции в комментариях кода.

Как добавить фильтр по полям в админку WordPress

Создание собственного фильтра в админке WP довольно не сложная задача, главное понимать как работают функции get_posts у ВП.

Сразу оговорюсь, используя код ниже можно не только фильтровать записи, страницы и другие типы постов по произвольным полям но и, например, по количеству комментариев (больше 10 например), использовать связи ACF и так далее.

Код для добавления дополнительного фильтра по пользовательским произвольным полям:

<?php
add_action('restrict_manage_posts','custom_filter_for_posts_html');
function custom_filter_for_posts_html(){
    //это функция которая отображает сам фильтр
?>
    <label for="filter-by-field" class="screen-reader-text">Мой фильтр</label>
    <select name="meta_filter" id="filter-by-field">
        <option<?php if(!isset($_GET['meta_filter']) || $_GET['meta_filter']==0){echo " selected";}?> value="0">Не применять фильтр</option>
        <option<?php if(isset($_GET['meta_filter']) && $_GET['meta_filter']==1){echo " selected";}?> value="1">Заполнено поле адрес</option>
        <option<?php if(isset($_GET['meta_filter']) && $_GET['meta_filter']==2){echo " selected";}?> value="2">Забыли записать номер телефона</option>
    </select>
<?php
}
add_filter('request','custom_filter_for_posts');
    
function custom_filter_for_posts($vars){
    // это функция которая обрабатывает запрос и фильтрует данные
    // $vars - это стандартные параметры запроса WP? типа как у функции get_posts
    // мы дописываем только то что нам нужно, не меняя тех значений которые нам не нужны
    
    global $pagenow;
    global $post_type;
    
    $start_in_post_types=array('post'); // тут нужно указать все типы постов где нужен этот фильтр, например 'page','my_type_post' и т.д.
 
    if( !empty($pagenow) && $pagenow=='edit.php' && in_array($post_type , $start_in_post_types)){
        
        if (!empty($_GET['meta_filter'])){
            
            switch (intval($_GET['meta_filter'])){//в зависимости от значения поля дописываем информацию для фильтра
                case 1:    $vars['meta_query']=array(
                            "relation"=>"AND",
                            array(
                                "key"=>"adress_meta",
                                "value"=>"",
                                "compare"=>"!="
                            )
                        );
                        break;
                
                case 2:    $vars['meta_query']=array(
                            "relation"=>"AND",
                            array(
                                "key"=>"phone_meta",
                                "value"=>"",
                                "compare"=>"="
                            )
                        );
                        break;
            } 
        }
 
    }
    
    return $vars;
 
}
?>

Результат работы фильтра для админки вордпресс:

фильтр по мета полям в админку WordPress

Фильтр можно менять как вам удобно, дополнительные параметры можно смотреть вот здесь параметры функции get_posts и query_posts (будет открыто в новой вкладке).

Этот код нужно забросить в файл вашей темы functions.php но думаю это вы и без меня знаете 🙂 .

Вот такой простой код добавляет фильтр для мета полей в админку WP.

Спасибо за внимание, не забываем поделиться ссылкой с друзьями:

Комментарии к записи «Дополнительный фильтр в админку WordPress edit.php»:
Сделать заказ
Онлайн помощь по WordPress