Как программно Настроить Пользовательские постоянные ссылки в Моей теме?
Я создаю собственную тему. Это узкоспециализированная тема для превращения WordPress в приложение, а не в систему CMS или блог. Например, система планирования стоматологического кабинета (с возможностями CMS и виджетов), в качестве примера.
Поскольку для правильной работы моей теме нужны красивые URL-адреса, мне действительно нужно, чтобы файл .htaccess был тем файлом по умолчанию, который создается только тогда, когда кто-то устанавливает постоянные ссылки на пользовательские (а затем вводит что-то вроде %имя поста%). Как мне запустить это в WordPress программно, чтобы он создал это? Я имею в виду, я, вероятно, мог бы сам перезаписать файл во время активации темы, но лучше было бы использовать для этого API WordPress.
3 answers
Чтобы полностью включить постоянные ссылки, вам также необходимо убедиться, что .htaccess также создан. Для этого вам нужно установить опцию и очистить правила с помощью логического значения.
global $wp_rewrite;
//Write the rule
$wp_rewrite->set_permalink_structure('/%postname%/');
//Set the option
update_option( "rewrite_rules", FALSE );
//Flush the rules and tell it to write htaccess
$wp_rewrite->flush_rules( true );
Если вы используете это в плагине, оно должно быть в крючке init
, нет крючок load
. Если он находится в крючке load
, он выдаст ошибку, в которой говорится, что $wp_rewrite
равно нулю.
Важно: У вас также должно быть условие, поэтому оно устанавливается только один раз. (Вы можете создать опцию и проверить, есть ли он установлен, если нет, то вы запускаете этот код постоянной ссылки и устанавливаете этот параметр)
Я также обычно проверяю, является ли это стороной администратора, и запускаю ее только в том случае, если это так.
function change_permalinks() {
global $wp_rewrite;
$wp_rewrite->set_permalink_structure('/%postname%/');
$wp_rewrite->flush_rules();
}
add_action('init', 'change_permalinks');
Возможно, вам не понадобится крючок действия, если вы вставляете его в код функции активации темы.
Я также обнаружил, что это лишь немного сработало. Вам все равно нужно щелкнуть страницу настроек постоянных ссылок, чтобы создать этот файл.htaccess. Итак, что же делать? Ну, я обнаружил, что могу использовать IFRAME, который автоматически загружает эту страницу для меня с панели параметров моей темы, а затем создаст для меня этот файл.htaccess.
<iframe style="position:absolute;top:-5000px" src="<?= site_url() ?>/wp-admin/options-permalink.php"></iframe>
Вот как я это использую, чтобы это происходило только тогда, когда моя тема активирована, и только в том случае, если ранее не сохранялись существующие настройки (чтобы не нарушать что-то, сделанное до использования моей темы).
/*
* Set permlinks on theme activate
*/
function set_custom_permalinks() {
$current_setting = get_option('permalink_structure');
// Abort if already saved to something else
if($current_setting) {
return
}
// Save permalinks to a custom setting, force create of rules file
global $wp_rewrite;
update_option("rewrite_rules", FALSE);
$wp_rewrite->set_permalink_structure('/news/%postname%/');
$wp_rewrite->flush_rules(true);
}
add_action('after_switch_theme', 'set_custom_permalinks');
Преимущество этого заключается в том, что он будет запускаться только один раз, когда тема активирована, а не каждый раз, когда WordPress загружается при посещении сайта.