Как программно Настроить Пользовательские постоянные ссылки в Моей теме?


Я создаю собственную тему. Это узкоспециализированная тема для превращения WordPress в приложение, а не в систему CMS или блог. Например, система планирования стоматологического кабинета (с возможностями CMS и виджетов), в качестве примера.

Поскольку для правильной работы моей теме нужны красивые URL-адреса, мне действительно нужно, чтобы файл .htaccess был тем файлом по умолчанию, который создается только тогда, когда кто-то устанавливает постоянные ссылки на пользовательские (а затем вводит что-то вроде %имя поста%). Как мне запустить это в WordPress программно, чтобы он создал это? Я имею в виду, я, вероятно, мог бы сам перезаписать файл во время активации темы, но лучше было бы использовать для этого API WordPress.

Author: Volomike, 2011-12-13

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 равно нулю.

Важно: У вас также должно быть условие, поэтому оно устанавливается только один раз. (Вы можете создать опцию и проверить, есть ли он установлен, если нет, то вы запускаете этот код постоянной ссылки и устанавливаете этот параметр)

Я также обычно проверяю, является ли это стороной администратора, и запускаю ее только в том случае, если это так.

 5
Author: Don Rhummy, 2015-10-22 06:02:43
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>
 5
Author: Volomike, 2012-01-10 03:52:04

Вот как я это использую, чтобы это происходило только тогда, когда моя тема активирована, и только в том случае, если ранее не сохранялись существующие настройки (чтобы не нарушать что-то, сделанное до использования моей темы).

/*
 * 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 загружается при посещении сайта.

 1
Author: Drew Baker, 2020-07-10 22:29:33