Записать/удалить из файла.htaccess по умолчанию из плагина?
Я работаю над плагином WordPress, и у меня есть флажок для добавления заголовков управления кэшем. Я хотел бы записать в файл htaccess, если для параметра установлено значение 1, иначе удалите новое содержимое.
Я пытался добиться этого с помощью insert_with_markers()
, но безрезультатно. Вот функции, которые я использовал:
function write_cache_control(){
$htaccess = get_home_path().".htaccess";
$lines = array();
$lines[] = '<FilesMatch "\.(js|css|jpg|jpeg|gif|png|pdf|swf|svg|svgz|ico|ttf|ttc|otf|eot|woff|woff2|webp)$">';
$lines[] = '<IfModule mod_headers.c>';
$lines[] = 'ExpiresActive On';
$lines[] = 'ExpiresDefault "access plus 1 month"';
$lines[] = 'Header set Cache-Control "public, immutable, max-age=2628000, s-maxage=2628000"';
$lines[] = 'Header set Access-Control-Allow-Origin "*';
$lines[] = '</IfModule>';
$lines[] = '</FilesMatch>';
insert_with_markers($htaccess, "Cache Control", $lines);
}
function clear_cache_control(){
$htaccess = get_home_path().".htaccess";
insert_with_markers($htaccess, "Cache Control", '');
}
Я пытался подключить их к wp
, init
& wp_init
но, похоже, ничего не получается. Есть ли что-то, чего я не понимаю? Должен ли я быть использование WordPress'wp_rewrite
или PHP fread
& fwrite
или что-то в этом роде?
1 answers
Почти весь ваш код верен. Я даже не знал о функции insert_with_markers, а теперь знаю, так что спасибо.
В свою очередь, я полагаю, что у меня есть ваше решение.
get_home_path()
не определяется, когда какой-либо из крючков (init
,wp
, и т.д.), о которых вы упомянули, срабатывают. Эта функция определена на стороне администратора"file.php ", который, как часть панели управления администратора, еще не загружен.
Крючок admin_init
, однако, должен сослужить вам хорошую службу, предполагая, что вы внесение этих изменений.htaccess на стороне администратора. Если нет, вы можете либо включить wp-admin/includes/file.php вручную или используйте альтернативный способ поиска .htaccess, такой как постоянный ABSPATH (хотя они не эквивалентны).
Используя крючок admin_init для первой предоставленной вами функции, я нашел правила, записанные в мой файл .htaccess, при следующей загрузке страницы на стороне администратора.
Кстати, возможно, вам захочется проверить current_user_can( 'edit_files' )
, прежде чем разрешить этому коду бежать.