Вопрос или проблема
В чем разница между manage_{$post_type}_posts_columns
и manage_edit-{$post_type}_columns
?
Не может ли кто-то объяснить разницу между этими двумя подходами?
Это связано с тем, как строится таблица постов в админской части. WordPress использует класс WP_Posts_List_Table
для генерации и управления этой таблицей. Вы заметите, что в админской области есть несколько подобных таблиц: Плагины, Таксономии, Пользователи и т.д. Каждая из них является отдельным классом, но все они наследуются от базового класса WP_List_Table
.
manage_edit-{$post_type}_columns
— это более общий фильтр, который задается (но не вызывается) в WP_List_Table
. И, фактически, это manage_{$screen->id}_columns
. Колбэк — это метод get_columns
для объекта таблицы.
add_filter( "manage_{$this->screen->id}_columns", array( &$this, 'get_columns' ), 0 );
Этот фильтр используется функцией get_column_headers()
для получения заголовков колонок.
Так где же тогда manage_{$post_type}_posts_columns
? Помните метод get_columns()
, который вызывается для фильтра manage_{$screen->id}_columns
, класс WP_Posts_List_Table
переопределяет базовый метод из WP_List_Table
. В WP_Posts_List_Table::get_columns()
вызывается фильтр manage_{$post_type}_posts_columns
.
Подводя итоги:
- Создается объект
WP_Posts_List_Table
- Его родительский класс
WP_List_Table
добавляет$this->get_columns()
к хукуmanage_{$screen->id}_columns
- Функция
get_column_headers()
вызывает фильтрmanage_{$screen->id}_columns
WP_Posts_List_Table
переопределил методget_columns()
- Внутри
WP_Posts_List_Table::get_columns()
вызывается фильтрmanage_{$post_type}_posts_columns
Здесь будет выполняться ваш хук manage_{$post_type}_posts_columns WP_Posts_List_Table::get_columns()
вернет колонки и затем выполнит остальные фильтры дляmanage_{$screen->id}_columns
Какой из них использовать? Я не знаю. Мы знаем, что manage_{$post_type}_posts_columns
может вызываться только для типов постов, в то время как manage_edit-{$post_type}_columns
может соответствовать другой админ-странице (хотя я не уверен, что это будет так).
Они оба по сути делают одно и то же.
manage_edit-{$post_type}_columns
раньше был старым рекомендуемым хуком для создания или изменения колонок для пользовательских типов постов.
С выходом WordPress 3.1 (23 февраля 2011 года), был добавлен manage_{$post_type}_posts_columns
, который теперь является рекомендуемым хуком для использования.
Вот цитата из Codex:
В WP 3.1, manage_edit-{$post_type}_columns был заменен на manage_{$post_type}_posts_columns.
замена = вытеснение и замена.
Хотя старый хук не является устаревшим, новый хук сейчас является тем, что нужно использовать.
Ответ или решение
Разница между хуками manage_{$post_type}_posts_columns
и manage_edit-{$post_type}_columns
в WordPress заключается в их предназначении и способе, которым они взаимодействуют с классом WP_Posts_List_Table
.
-
Контекст использования:
manage_edit-{$post_type}_columns
: Это более общий фильтр, который на самом деле используется в контексте методаget_columns()
базового классаWP_List_Table
. Он предназначен для получения заголовков колонок для различных типов постов, и его использование было рекомендовано до версии WordPress 3.1.manage_{$post_type}_posts_columns
: Этот фильтр был введен в WordPress 3.1 и является более конкретным. Он вызывается в методеget_columns()
классаWP_Posts_List_Table
, который обрабатывает список постов.
-
Порядок выполнения:
- Хук
manage_edit-{$post_type}_columns
вызывается в базовом классеWP_List_Table
, что делает его более общим и подходящим для различных типов данных, не ограничиваясь только постами. - Хук
manage_{$post_type}_posts_columns
, в свою очередь, вызван в конкретном классеWP_Posts_List_Table
, что делает его предпочтительным для пользовательских типов постов, поскольку он обеспечивает более целенаправленное управление колонками именно для списков постов.
- Хук
-
Рекомендации к использованию:
- На данный момент рекомендуется использовать
manage_{$post_type}_posts_columns
, так как он является более современным и специфичным инструментом для работы с колонками постов. Несмотря на то, чтоmanage_edit-{$post_type}_columns
не является устаревшим, его использование не рекомендуется, так как это может привести к путанице и менее предсказуемому поведению в будущем.
- На данный момент рекомендуется использовать
В заключение, оба фильтра выполняют аналогичную функцию — позволяют изменять и задавать заголовки колонок в админ-таблице. Однако manage_{$post_type}_posts_columns
должен быть предпочтительным выбором при работе с пользовательскими типами постов и таблицей постов в WordPress.