Вопрос или проблема
Я столкнулся с точно той же проблемой, о которой говорится в этом 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
, что является неуклюжей и небезопасной практикой. Используйте фильтр, и ваша проблема будет решена элегантным и безопасным способом.
Если у вас возникнут дополнительные вопросы или потребуется помощь с реализацией, не стесняйтесь спрашивать.