В чем разница между “manage_{$post_type}_posts_columns” и “manage_edit-{$post_type}_columns”?

Вопрос или проблема

В чем разница между 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.

Подводя итоги:

  1. Создается объект WP_Posts_List_Table
  2. Его родительский класс WP_List_Table добавляет $this->get_columns() к хуку manage_{$screen->id}_columns
  3. Функция get_column_headers() вызывает фильтр manage_{$screen->id}_columns
  4. WP_Posts_List_Table переопределил метод get_columns()
  5. Внутри WP_Posts_List_Table::get_columns() вызывается фильтр manage_{$post_type}_posts_columns Здесь будет выполняться ваш хук manage_{$post_type}_posts_columns
  6. 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.

  1. Контекст использования:

    • 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, который обрабатывает список постов.
  2. Порядок выполнения:

    • Хук manage_edit-{$post_type}_columns вызывается в базовом классе WP_List_Table, что делает его более общим и подходящим для различных типов данных, не ограничиваясь только постами.
    • Хук manage_{$post_type}_posts_columns, в свою очередь, вызван в конкретном классе WP_Posts_List_Table, что делает его предпочтительным для пользовательских типов постов, поскольку он обеспечивает более целенаправленное управление колонками именно для списков постов.
  3. Рекомендации к использованию:

    • На данный момент рекомендуется использовать manage_{$post_type}_posts_columns, так как он является более современным и специфичным инструментом для работы с колонками постов. Несмотря на то, что manage_edit-{$post_type}_columns не является устаревшим, его использование не рекомендуется, так как это может привести к путанице и менее предсказуемому поведению в будущем.

В заключение, оба фильтра выполняют аналогичную функцию — позволяют изменять и задавать заголовки колонок в админ-таблице. Однако manage_{$post_type}_posts_columns должен быть предпочтительным выбором при работе с пользовательскими типами постов и таблицей постов в WordPress.

Оцените материал
Добавить комментарий

Капча загружается...