Записать/удалить из файла.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 или что-то в этом роде?

Author: AT92, 2019-03-26

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' ), прежде чем разрешить этому коду бежать.

 2
Author: tmdesigned, 2019-03-27 00:57:18