Что такое дополнительные поля записей должен знать каждый пользователь WordPress. С помощью дополнительных полей, можно значительно расширить функционал вашего сайта. В случае, если вы не знаете, как создавать дополнительные поля, вы можете ознакомится с данной информацией в моем уроке по созданию онлайн кинотеатра на WordPress. В данном уроке, я расскажу, как добавить в админку функцию фильтра записей по произвольным полям.
Функция фильтра может пригодится во многих случаях, например вы хотите сделать слайдер на основании дополнительных полей, в данном случае вам крайне необходим фильтр, для легкого управления слайдами.
Вот так будет выглядеть наш будущий фильтр.
Для того чтобы вы увидели, то, что на скриншоте, вам нужно:
<?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 */ 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 }
После чего, зайдя в Записи вы должны увидеть дополнительные функции фильтрации. Если у вас на данном моменте будут дополнительные поля, при нажатии на выпадающий список вы увидите полный список полей.
Чтобы отфильтровать записи, из выпадающего списка, выберите нужное дополнительное поле, при необходимости укажите его значение, и нажмите на кнопку Фильтр.
Фильтр готов, если вам понравился данный урок, буду благодарен за репосты и лайки в социальные сети.