Экран пользовательских опций администратора не сохраняется, если у пользователя нет прав manage_options.

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

Я столкнулся с точно той же проблемой, о которой говорится в этом Trac: https://core.trac.wordpress.org/ticket/14365

Я вижу, что один из разработчиков добавил здесь Diff: https://core.trac.wordpress.org/attachment/ticket/14365/14365.api.diff, который, похоже, добавляет возможность зарегистрировать точную возможность, которой должен обладать пользователь, чтобы сохранять настройки — без необходимости, чтобы у пользователя была широкая возможность “manage_options”, которой я не хочу, чтобы у них была, поскольку это открывает слишком много других вещей в Админ.

Хорошо, этот Diff выглядит для меня хорошо. Но, похоже, он так и не был реализован, и этот запрос в Trac так и не был решен.

Я правильно всё это понимаю? В данной проблеме нет решения?

Похоже, мне придётся прибегнуть к чему-то очень неэстетичному, как временное добавление, а затем удаление возможности “manage_options” (?)

Хорошо… Я нашёл ответ. Они реализовали это как фильтр (который я никак не мог понять через тот Trac).

Смотрите здесь: Правильное использование option_page_capability_{$page_name}

Как только я добавил фильтр возможностей в свой класс опций плагина — всё работает безупречно.

Ответ или решение

Ваш вопрос касается проблемы с сохранением настроек пользовательских параметров администрирования в WordPress, когда требуется наличие разрешения manage_options. Вы правильно обратили внимание на проблему, описанную в отчетах Trac, и на предоставленный патч, который, к сожалению, не был реализован.

Тем не менее, в WordPress была внедрена функция, которая позволяет вам задать точное разрешение, необходимое для сохранения параметров, без необходимости предоставления общего разрешения manage_options. Эта функция реализована в виде фильтра под названием option_page_capability_{$page_name}, где {$page_name} — это название вашей страницы параметров.

Для использования этого фильтра вам нужно добавить его в ваш класс, который отвечает за параметры плагина. Вот пример того, как это можно сделать:

add_filter('option_page_capability_my_options_page', function() {
    return 'my_custom_capability'; // Замените 'my_custom_capability' на вашу способность
});

После добавления данного фильтра у пользователей, имеющих конкретную возможность (например, my_custom_capability), появится возможность сохранять настройки на вашей странице опций, не требуя при этом широких прав управления, которые предоставляет manage_options.

Таким образом, вам не придется прибегать к временной добавке и удалению прав manage_options, что является неуклюжей и небезопасной практикой. Используйте фильтр, и ваша проблема будет решена элегантным и безопасным способом.

Если у вас возникнут дополнительные вопросы или потребуется помощь с реализацией, не стесняйтесь спрашивать.

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

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