Я искал способ, позволяющий моему редактору удалить сообщение из кэша страниц.
Эта проблема:
Я делаю мета-описания обновлений, которые не обновляются после нажатия кнопки «обновить пост», и иногда заголовки не обновляются без удаления сообщения из кеша страниц. Тем не менее, он проходит, если я нажму дважды обновить.
Проблема в том, что у редактора нет прав на удаление сообщения из кэша.
Что я пробовал:
Я обнаружил, что некоторые пользователи смогли создать скрипт, но я не могу найти код для него в FAQ. https://wordpress.org/support/topic/plugin-w3-total-cache-can-non-admin-users-clear-the-cache
Во-вторых, я прочитал пару упоминаний о фрагментарном кешировании, но никакой дополнительной документации по нему не вижу.
В-третьих, я пытался следить за изменением ролей пользователей, но это не было безопасно для плагина: https://wordpress.org/support/topic/allow-editors-to-flush-cache-from-toolbar
В-четвертых, я нашел другой интерес к этому, но это не было решено: https://wordpress.org/support/topic/editor-user-level-able-to-purge-cache
В-пятых, на StackOverflow они ограничивают его от определенных пользователей. Что означает, что это возможно, но не прямое решение? запрещать "Очистка от кеша страниц" для конкретных ролей в w3-total-cache
Просить:
Я хотел бы найти способ для роли редактора очистить кэш страницы для одного сообщения. Если бы вы могли предоставить обходной путь, например, отдельный скрипт страницы, чтобы сделать это вручную или способ настройки разрешений с помощью functions.php
Кроме того, я был бы очень признателен.
Мне нужна была похожая вещь, но я уверен, что вы можете адаптировать это к вашим потребностям:
Сначала несколько фильтров, чтобы оно показывало «Performance» -Menu на AdminBar для обычных редакторов:
function allow_users_to_flush($capability) {
return "publish_post";
}
add_filter("w3tc_capability_row_action_w3tc_flush_post", "allow_users_to_flush", 10, 10);
add_filter("w3tc_capability_w3tc_flush", "allow_users_to_flush", 10, 10);
add_filter("w3tc_capability_w3tc_flush_all", "allow_users_to_flush", 10, 10);
add_filter("w3tc_capability_admin_bar", "allow_users_to_flush", 10, 10);
add_filter("w3tc_capability_admin_bar_flush_all", "allow_users_to_flush", 10, 10);
add_filter("w3tc_capability_admin_bar_w3tc", "allow_users_to_flush", 10, 10);
add_filter("w3tc_capability_admin_bar_flush", "allow_users_to_flush", 10, 10);
add_filter("w3tc_capability_w3tc", "allow_users_to_flush", 10, 10);
И, поскольку пользователю необходимо разрешить доступ к приборной панели для очистки / очистки, фильтр крышки:
function w3tc_cap_filter( $allcaps, $cap, $args ) {
if(preg_match("/w3tc_dashboard/", $_SERVER["REQUEST_URI"])) {
$allcaps[$cap[0]] = true;
}
return $allcaps;
}
add_filter( 'user_has_cap', 'w3tc_cap_filter', 10, 3 );
Вуаля, пользователь теперь видит меню и может очистить кеш (мне нужно было «Очистить все кеши», а не один пост / страницу, но это должно работать так же).
Мои разрешения довольно широки, но это работает для моего случая. Возможно, вы захотите добавить больше мер безопасности в зависимости от ваших требований.
Для справки:
http://hookr.io/plugins/w3-total-cache/0.9.5/filters/#index=w имеет хороший обзор фильтров в w3.
https://codex.wordpress.org/Plugin_API/Filter_Reference/user_has_cap для информации о возможности фильтра.
вам нужно установить WPFront User Role Editor (https://wpfront.com)
и проверьте вариант http://joxi.ru/n2Y09K4tLlVWm6