Как в админке WordPress, отфильтровать записи по произвольному полю

Что такое дополнительные поля записей должен знать каждый пользователь WordPress. С помощью дополнительных полей, можно значительно расширить функционал вашего сайта. В случае, если вы не знаете, как создавать дополнительные поля, вы можете ознакомится с данной информацией в моем уроке по созданию онлайн кинотеатра на WordPress. В данном уроке, я расскажу, как добавить в админку функцию фильтра записей по произвольным полям.

Зачем все это?

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

Фильтр по дополнительному полю

Вот так будет выглядеть наш будущий фильтр.

Плагин и активация

Для того чтобы вы увидели, то, что на скриншоте, вам нужно:

  • В папке с плагинами, создать файл filter.php (название не имеет значения)
  • Вставить код

<?php
/*
Plugin Name: Admin Filter BY Custom Fields
Plugin URI: http://en.bainternet.info
Description: Filter posts or pages in admin by custom fields (post meta)
Version: 1.0
Author: Bainternet
Author URI: http://en.bainternet.info
*/

&nbsp;

add_filter( 'parse_query', 'ba_admin_posts_filter' );
add_action( 'restrict_manage_posts', 'ba_admin_posts_filter_restrict_manage_posts' );

function ba_admin_posts_filter( $query )
{
global $pagenow;
if ( is_admin() && $pagenow=='edit.php' && isset($_GET['ADMIN_FILTER_FIELD_NAME']) && $_GET['ADMIN_FILTER_FIELD_NAME'] != '') {
$query->query_vars['meta_key'] = $_GET['ADMIN_FILTER_FIELD_NAME'];
if (isset($_GET['ADMIN_FILTER_FIELD_VALUE']) && $_GET['ADMIN_FILTER_FIELD_VALUE'] != '')
$query->query_vars['meta_value'] = $_GET['ADMIN_FILTER_FIELD_VALUE'];
}
}

function ba_admin_posts_filter_restrict_manage_posts()
{
global $wpdb;
$sql = 'SELECT DISTINCT meta_key FROM '.$wpdb->postmeta.' ORDER BY 1';
$fields = $wpdb->get_results($sql, ARRAY_N);
?>
<select name="ADMIN_FILTER_FIELD_NAME">
<option value=""><?php _e('Фильтр по дополнительным полям', 'baapf'); ?></option>
<?php
$current = isset($_GET['ADMIN_FILTER_FIELD_NAME'])? $_GET['ADMIN_FILTER_FIELD_NAME']:'';
$current_v = isset($_GET['ADMIN_FILTER_FIELD_VALUE'])? $_GET['ADMIN_FILTER_FIELD_VALUE']:'';
foreach ($fields as $field) {
if (substr($field[0],0,1) != "_"){
printf
(
'<option value="%s"%s>%s</option>',
$field[0],
$field[0] == $current? ' selected="selected"':'',
$field[0]
);
}
}
?>
</select> <?php _e('Значение:', 'baapf'); ?><input type="TEXT" name="ADMIN_FILTER_FIELD_VALUE" value="<?php echo $current_v; ?>" />
<?php
}

  • Сохранить файл
  • Зайдя в админку, активировать плагин Admin Filter BY Custom Fields

После чего, зайдя в Записи вы должны увидеть дополнительные функции фильтрации. Если у вас на данном моменте будут дополнительные поля, при нажатии на выпадающий список вы увидите полный список полей.

Чтобы отфильтровать записи, из выпадающего списка, выберите нужное дополнительное поле, при необходимости укажите его значение, и нажмите на кнопку Фильтр.

Фильтр готов, если вам понравился данный урок, буду благодарен за репосты и лайки в социальные сети.

Хотите подобный функционал, верстку либо помощь в настройке вашего сайта?
Свяжитесь со мной

Оставить отзыв

(обязательно)

(обязательно)


Наши друзья
- ARTtime - Блог о Photoshop и Дизайн
- Блог о дизайне и арте
Реклама