При редактировании одного из моих пользовательских типов записей я хочу иметь возможность перечислять все записи по настраиваемым полям вместо даты их публикации (что для пользовательского типа публикации, вероятно, не имеет значения). Я получил комментарий от комментариев в блоге о пользовательских типах сообщений, и автор сказал, что это возможно, и что он даже сделал это, чтобы вы могли нажимать на названия столбцов для пользовательской сортировки. Он упомянул posts_orderby
функцию, которую я отметил в своих комментариях, но теперь я могу найти пост в блоге. Какие-либо предложения? Я видел одно решение, которое использовало
add_action('wp', 'check_page');
И check_page
функция, используемая add_filter
для изменения запроса, но я уверен, что он будет работать только в файлах темы, а не в области администратора.
источник
Ответы:
Как вы можете, вероятно, догадаться по отсутствию ответов, решение не совсем тривиально. Что я сделал, так это создал несколько автономный пример, который предполагает собственный тип записи "
movie
" и ключ настраиваемого поля " Жанр ".Отказ от ответственности : это работает с WP3.0, но я не уверен, что он будет работать с более ранними версиями.
В основном вам нужно зацепить два (2) хука, чтобы он работал, и еще два (2), чтобы сделать его очевидным и полезным.
Первый хук - это '
restrict_manage_posts
', который позволяет вам генерировать HTML<select>
в области над списком постов, где фильтры " Массовые действия " и " Показывать даты ". Предоставленный код будет генерировать функциональность « Сортировать по: », как показано в следующем фрагменте экрана:(источник: mikeschinkel.com )
Код использует прямой SQL , потому что это не функция WordPress API , чтобы обеспечить список всех meta_keys на пост типов (звучит как будущий Trac билет мне ...) Во всяком случае, вот код. Обратите внимание, что он извлекает тип записи из
$_GET
и проверяет, чтобы убедиться, что это и правильный тип записи,post_type_exists()
иmovie
тип записи (эти две проверки являются избыточными, но я сделал это, чтобы показать вам, как, если вы не хотите закодируйте тип сообщения.) Наконец, я используюsortby
параметр URL, поскольку он не конфликтует ни с чем в WordPress:Вторым обязательным шагом является использование
parse_query
ловушки, которая вызывается после того, как WordPress решает, какой запрос следует выполнить, но до того, как он выполнит запрос. Здесь мы получим установить значенияorderby
иmeta_key
вquery_var
массиве запроса, которые задокументированы в Кодексе вorderby
параметре дляquery_posts()
. Мы проверяем, чтобы убедиться, что:is_admin()
),$pagenow=='edit.php'
),post_type
параметром URL, равнымmovie
, иsortby
параметром URL, и ей не было присвоено значение « Нет ».Если все эти тесты пройдены, мы устанавливаем
query_vars
(как описано здесь )meta_value
и нашеsortby
значение для « Жанр »:И это все, что вам нужно сделать; крючки "
posts_order
" или "wp
" не требуются! Конечно, вам действительно нужно сделать больше; вам нужно добавить несколько столбцов на вашей странице, в которых перечислены сообщения, чтобы вы могли видеть значения, по которым они сортируются, иначе пользователи могут запутаться. Так что добавьтеmanage_{$post_type}_posts_columns
крючок, в этом случаеmanage_movie_posts_columns
. Этот хук получает массив столбцов по умолчанию, и для простоты я просто заменил его на два стандартных столбца; флажок (cb
) и название сообщения (title
). (Вы можете проверитьposts_columns
с помощью,print_r()
чтобы увидеть, что еще доступно по умолчанию.)Я решил добавить « Sorted By: », когда есть
sortby
параметр URL, а когда его нетNone
:Наконец, мы используем
manage_pages_custom_column
ловушку для фактического отображения значения, когда есть сообщение с соответствующим типом записи и, возможно, с избыточным тестом дляis_admin()
и$pagenow=='edit.php'
. Когда естьsortby
параметр URL, мы извлекаем значение настраиваемого поля, которое сортируется, отображая его в нашем списке. Вот как это выглядит (помните, это тестовые данные, поэтому нет комментариев из галереи арахиса о классификации фильмов! :):(источник: mikeschinkel.com )
И вот код:
Обратите внимание, что это выбирает только первый « Жанр » для a
movie
, то есть первое meta_value в случае нескольких значений для данного ключа. Но опять же, я не уверен, как это будет работать в противном случае!А для тех, кто не знает, где разместить этот код, вы можете поместить его в плагин или, скорее всего, для новичка в
functions.php
файле в вашей текущей теме.Как это помогает
источник
'months_dropdown_results'
и'restrict_manage_posts'
. PS Upvotes всегда приветствуются. :)Начиная с WordPress 3.1 (я использую бета-версию), столбцы теперь можно сортировать по заголовкам.
Следующий пост подробно описывает, как их реализовать.
http://scribu.net/wordpress/custom-sortable-columns.html
источник
Вот простое решение:
Просто замените ВАШ ПОЧТОВЫЙ ТИП и 'your_custom_field'
источник