Случай из моей практики. У клиента был организован раздел товаров посредством произвольных записей типа post (post_type=product). У этих записей имелись произвольные поля barcode и barcode2, содержащие штрихкод. Необходимо было организовать поиск по артикулу внутри админки Вордпрес.
Реализовано было так (код для function.php):
/* поиск по штрихкоду в админке */ add_action('restrict_manage_posts','custom_filter_for_posts_html'); function custom_filter_for_posts_html(){ /* это функция которая отображает сам фильтр */?> <style> input[type='number'] {-moz-appearance:textfield;} input::-webkit-outer-spin-button, input::-webkit-inner-spin-button {-webkit-appearance: none;} </style> <label for="filter-by-field" class="screen-reader-text">Штрихкод</label> <input placeholder="Штрихкод" type="number" value="<?php if (isset($_GET['meta_filter'])) {echo sanitize_text_field($_GET['meta_filter']);} ?>" name="meta_filter" id="filter-by-field"> <?php } add_filter('request','custom_filter_for_posts'); function custom_filter_for_posts($vars){ // функция custom_filter_for_posts обрабатывает запрос и фильтрует данные // $vars - это стандартные параметры запроса WP. Типа как у функции get_posts // в итоге мы дописываем только то что нам нужно, не изменяя тех значений которые нам не нужны global $pagenow; global $post_type; // тут нужно указать все типы постов где нужен этот фильтр, например 'page','product' и т.д. $start_in_post_types=array('product'); if( !empty($pagenow) && $pagenow=='edit.php' && in_array($post_type , $start_in_post_types)){ $contents = (string)sanitize_text_field($_GET['meta_filter']); if (!empty($_GET['meta_filter'])){ $vars['meta_query']=array( "relation"=>'OR', array( "key"=>"barcode", // ключ 1-го произвольного поля по которому идет поиск "value"=> $contents, 'type' => 'char', 'compare' => 'LIKE' ), array( 'key' => 'barcode2', // ключ 2-го произвольного поля по которому идет поиск 'value' => $contents, 'type' => 'char', 'compare' => 'LIKE' ) ); } } return $vars; } /* end поиск по штрихкоду в админке */
В админке все выглядело так:
Разумеется, что аналогичным способом вы можете создавать свои фильтры, причем они не обязательно должны быть текстовыми как в моем случае.
Очень и очень полезная информация!! Спасибо! Очень помогли!!!
Рад, что смог помочь!
Спасибо, все работает! Два дня искал решение, ничего рабочего на эту тему не мог найти в интернете, пока к вам не попал. Просто супер.