Уроки по WordPress

Поиск по произвольным полям в админке Вордпрес. Фильтры

Случай из моей практики. У клиента был организован раздел товаров посредством произвольных записей типа 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 поиск по штрихкоду в админке */

В админке все выглядело так:

Поиск по произвольным полям в wp

Разумеется, что аналогичным способом вы можете создавать свои фильтры, причем они не обязательно должны быть текстовыми к в моем случае.


Рейтинг:

2017-09-29 | | 0 comment | , ,

Альтернативный заголовок изображения

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *