ВСЁ — РАЗОБРАЛСЯ!!!!
Привожу здесь тот пример который работает у меня:
//Добавляем пользовательскую таксономию
add_action( 'init', 'build_taxonomies', 0 );
function build_taxonomies() {
$args = array(
'hierarchical' => true
,'label' => 'Все типы'
,'query_var' => true
,'public' => true
,'show_in_nav_menus' => true
,'show_ui' => true
,'rewrite' => true
);
register_taxonomy( TAXONOMY_TYPE, NAMEPOSTTYPE, $args );
}
//Добавляем выподающий список типов недвижимости для фильтра
add_action("restrict_manage_posts", "ki_property_dropdown_property_type");
function ki_property_dropdown_property_type(){
global $post_type;
//global $typenow; //тоже значение что и $post_type
global $wp_query;
if ( is_object_in_taxonomy( $post_type, TAXONOMY_TYPE ) ) {
$dropdown_options = array(
'show_option_all' => 'Вся недвижимость',
'taxonomy' => TAXONOMY_TYPE,
'name' => TAXONOMY_TYPE,
'orderby' => 'name',
'selected' => $_GET[TAXONOMY_TYPE],
'hierarchical' => true,
'depth' => 3,
'show_count' => true, // Show # listings in parens
'hide_empty' => false // показывать даже пустые пункты
);
wp_dropdown_categories( $dropdown_options );
}
}
//этот код нужен чтобы работала фильтрация по пользоваттельскому типу
add_action( 'request', 'my_request' );
function my_request( $request ) {
if ( is_admin() && $GLOBALS['PHP_SELF'] == '/wp-admin/edit.php' && isset($request['post_type']) && $request['post_type']==NAMEPOSTTYPE ){
$request[TAXONOMY_TYPE] = get_term($request[TAXONOMY_TYPE],TAXONOMY_TYPE)->slug
}
return $request;
}
Как это работает:
1) При создании пользовательской таксономии не забываем параметр ‘query_var’ => true — это добавит в запрос к базе данных новую переменную, по которой можно будет выбирать нужные нам записи, соответственно в массиве $request также появится переменная имя которой будет название вашей таксономии т.е. запись $request[TAXONOMY_TYPE] — станет актуальной.
2) Создаём выпадающий список с перечнем значений нашей таксономии с помощью хука restrict_manage_posts и встроенной функции wp_dropdown_categories, на что обращаем внимание:
— ‘taxonomy’ и ‘name’ — должны быть равны и содержать имя вашей таксономии в моём случае TAXONOMY_TYPE;
— ‘selected’ я приравнял к $_GET[TAXONOMY_TYPE], т.к. значения списка являются целыми числами, а не значения slug, благодаря этому мой список помнит последнее значение;
3)Вешаем функцию my_request(), которая перед тем как обратится к базе данных и выдать нужные нам записи на основе выбранного значения узнает значение slug, и подставит его вместо term_id.
Пример приведенный выше отказывался у меня работать пока я не поменял $request[‘term’] на $request[TAXONOMY_TYPE]. Подозреваю, что массив $request — формируется где то выше, и содержит все значения переменных которые получает сервер $_GET, а возможно и $_POST. Где это происходит я в коде WordPress не нашёл.
Этот код работает при фильтрации по нескольким пользовательским таксономиям!!!
Много информации почерпнул вот по этому адресу wordpress.stackexchange.com, пример большой, всё расписано, но и он, как есть, у меня не заработал (не заработала именно фильтрация).
Если есть у кого поправки к моему примеру, уточнения или если кто сможет более глубоко описать механизм фильтрации по пользовательской таксономии — будет очень здорово.