Добавить меню фильтров в список сообщений администратора (настраиваемого типа) для фильтрации сообщений по пользовательским значениям полей

Этот ответ очень близок к тому, что я хочу сделать, но вместо этого я хотел бы указать конкретное настраиваемое поле и отобразить меню выбора его доступных значений. Спасибо!

37 голосов | спросил Adam 13 MarpmTue, 13 Mar 2012 18:27:30 +04002012-03-13T18:27:30+04:0006 2012, 18:27:30

1 ответ


60

Простой, сначала создайте раскрывающийся список только с необходимыми значениями метаданных, а затем поймайте отправку фильтра, просто измените POST_TYPE на имя вашего типа сообщения и META_KEY к имени вашего мета-ключа:

  & л;? PHP
/*
Имя плагина: фильтр администратора по пользовательским полям
URI плагина: http://en.bainternet.info
Описание: ответ на http://wordpress.stackexchange.com/q/45436/2487
Версия: 1.0
Автор: Bainternet
Автор URI: http://en.bainternet.info
* /

add_action ('restrict_manage_posts', 'wpse45436_admin_posts_filter_restrict_manage_posts');
/**
 * Сначала создайте раскрывающийся список
 * не забудьте изменить POST_TYPE на имя своего настраиваемого типа сообщений
 *
 * @author Охад Раз
 *
 * @return void
 * /
function wpse45436_admin_posts_filter_restrict_manage_posts () {
    $ type = 'post';
    if (isset ($ _ GET ['post_type'])) {
        $ type = $ _GET ['post_type'];
    }

    //добавлять только фильтр для типа публикации
    if ('POST_TYPE' == $ type) {
        //изменим это на список значений, которые вы хотите показать
        //в 'label' => формат «значение»
        $ values ​​= array (
            'label' => 'стоимость',
            'label1' => «Значение1»,
            'label2' => «Значение2»,
        );
        ? & GT;
        <select name = "ADMIN_FILTER_FIELD_VALUE">
        <option value = ""> & lt;? php_e ('Filter By', 'wose45436'); ? & GT; & Lt; опция /& GT;
        & Lt;? PHP
            $ current_v = isset ($ _ GET ['ADMIN_FILTER_FIELD_VALUE'])? $ _GET [ 'ADMIN_FILTER_FIELD_VALUE']: '';
            foreach ($ values ​​как $ label => $ value) {
                Printf
                    (
                        '<option value = "% s"% s>% s </option>',
                        $ Значение,
                        $ value == $ current_v? 'selected = "selected"': '',
                        $ этикетка
                    );
                }
        ? & GT;
        & Lt; /выбрать & GT;
        & Lt;? PHP
    }
}


add_filter ('parse_query', 'wpse45436_posts_filter');
/**
 * если представлен фильтр по почте
 *
 * обязательно измените META_KEY на фактический мета ключ
 * и POST_TYPE для имени вашего настраиваемого типа сообщений
 * @author Охад Раз
 * @param (объект wp_query) $ query
 *
 * @Вернуться к исчезновению
 * /
функция wpse45436_posts_filter ($ query) {
    глобальный $ pagenow;
    $ type = 'post';
    if (isset ($ _ GET ['post_type'])) {
        $ type = $ _GET ['post_type'];
    }
    if ('POST_TYPE' == $ type & amp; is_admin () & amp; & amp; $ pagenow == 'edit.php' & amp; isset ($ _ GET ['ADMIN_FILTER_FIELD_VALUE']) & amp; & amp; $ _GET [ 'ADMIN_FILTER_FIELD_VALUE']! = '') {
        $ query-> query_vars ['meta_key'] = 'META_KEY';
        $ query-> query_vars ['meta_value'] = $ _GET ['ADMIN_FILTER_FIELD_VALUE'];
    }
}
 
ответил Bainternet 13 MarpmTue, 13 Mar 2012 19:02:23 +04002012-03-13T19:02:23+04:0007 2012, 19:02:23

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132