Вопрос или проблема
Я хотел бы разработать плагин для WordPress, который добавлял бы пользовательские таблицы базы данных, а также страницы для взаимодействия с этими таблицами (например, форму для добавления новых записей, список текущих записей…)
Существует ли способ сделать эти страницы недоступными для редактирования и удаления (еще лучше, чтобы они не отображались в административной панели) так, чтобы только сам плагин был за них ответственен?
Если нет, существует ли лучшее решение, чем реализация этих страниц через PHP файлы, включая wp-load.php или подобные?
.
Ответ или решение
Конечно, разработка плагина для WordPress – это мощный способ добавить кастомные функциональности, включая создание и управление пользовательскими таблицами базы данных и страницами, взаимодействующими с этими таблицами. Рассмотрим вашу задачу по добавлению страниц, которые должны быть только для чтения, и недоступны для редактирования или удаления через административную панель WordPress.
Теория
Во-первых, важно понимать, что WordPress управляет страницами и постами через свою систему постов, записывая их в специальную таблицу в базе данных (обычно это wp_posts
). Страницы и посты, созданные обычным способом через административную панель, будут иметь свои записи в этой таблице, и по умолчанию административные пользователи смогут редактировать или удалять их, если у них есть соответствующие права доступа.
Чтобы сделать страницы непросматриваемыми и недоступными для редактирования через стандартную административную панель, можно рассмотреть два подхода: использование "пользовательских пост-типов" или генерацию страниц динамически.
Пример реализации
Использование пользовательских пост-типов. Это стандартный подход для создания новых сущностей, которые ведут себя как страницы или записи, но могут быть изолированы в административной панели:
- Регистрация пользовательского пост-типа. Вы можете использовать функцию
register_post_type
для создания кастомного типа сообщения. В параметрах этой функции можно задать метапараметры, указывая, чтобы они не отображались в административной панели ('show_in_menu' => false
). - Редактирование прав. Можно использовать фильтрующие хуки WordPress, такие как
map_meta_cap
, чтобы перекрыть права на редактирование и удаление этих страниц. Например, вы можете установить права доступа таким образом, что ни у одной из пользовательских ролей не будет доступа к редактированию или удалению этих объектов. - Исключение из списка. Вы можете использовать соответствующие хуки и фильтры (например,
manage_edit-{post_type}_columns
), чтобы не показывать эти объекты в списках на административных страницах.
Динамическая генерация страниц. Если вам не нужны записи с постоянным хранением в базе данных, можно использовать хуки для интерцепции запросов:
- Использование хуков. Хук
init
илиtemplate_redirect
позволит вам интерцептировать запросы к определённым URL, которые будут генерироваться плагиом. Например, добавьте правило перезаписи (rewrite rule) и хук, переходящий на кастомный PHP-шаблон. - Исключение. Вы таким образом сможете исключить эти страницы из административной панели, так как они никогда не будут сохраняться в привычной таблице постов.
Применение
Рассматривая конкретные шаги, для реализации желания сделать страницы только для чтения и исключить их из админ-панели, вы можете:
- Создать пользовательский пост-тип. Далее, в функции
register_post_type
убедитесь, что аргументыshow_ui
,show_in_menu
, иpublicly_queryable
заданы таким образом, чтобы они минимально проявлялись в интерфейсе:
function create_read_only_pages() {
register_post_type('custom_read_only_page', array(
'label' => 'Read-only Pages',
'public' => true,
'show_ui' => false, // не показывать в админке
'show_in_menu' => false,
'publicly_queryable' => true,
'capability_type' => 'page',
));
}
add_action('init', 'create_read_only_pages');
-
Используйте мета-возможности (meta capabilities) для ограничения прав доступа. Вы можете использовать
map_meta_cap
для запрета редактирования или удаления этих объектов. -
Создавайте и поддерживайте контент динамически. Это может включать обратные вызовы и правила перезаписи (rewrite rules), чтобы ваши страницы были доступны исключительно через магию плагина.
Каждый из этих подходов имеет свои преимущества и нюансы. Исходя из ваших конкретных нужд и архитектуры вашего проекта, вы можете гибко сочетать эти методы и использовать дополнительные возможности для их защиты (например, дополнительные проверки прав доступа или использование куки/сессий для управления доступом).
Эти практики помогают не только в обеспечении безопасности, но и упрощают поддержку в долгосрочной перспективе.