Пользовательская функция переключения постоянных ссылок. Пожалуйста, проверьте эту логику - PullRequest
0 голосов
/ 01 апреля 2010

На панели параметров моей темы есть настройка, позволяющая пользователю переключать настройку постоянных ссылок для поддержки дружественных URL-адресов. Я только разрешаю /% postname% / и /%postname%.html в качестве параметров.

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

У меня есть поле ввода в опциях темы, которое называется $ myTheme_permalinks. Значением по умолчанию для этого является "/% postname% /", но пользователь также может изменить его на "/%postname%.html"

Вот код в верхней части параметров темы для обработки этого параметра. Звучит ли это звучит?

if(get_option('myTheme_permalinks') =="/%postname%/" && get_option('permalink_structure') !== "/%postname%/" || !get_option('myTheme_permalinks'))
{
    require_once(ABSPATH . '/wp-admin/includes/misc.php');
    require_once(ABSPATH . '/wp-admin/includes/file.php');
    global $wp_rewrite;
    $wp_rewrite->set_permalink_structure('/%postname%/');
    $wp_rewrite->flush_rules();
    update_option('permalink_structure','/%postname%/');
    update_option('myTheme_permalinks','/%postname%/');
}
else if (get_option('myTheme_permalinks') =="/%postname%.html" && get_option('permalink_structure') !== "/%postname%.html")
{
    require_once(ABSPATH . '/wp-admin/includes/misc.php');
    require_once(ABSPATH . '/wp-admin/includes/file.php');
    global $wp_rewrite;
    $wp_rewrite->set_permalink_structure('/%postname%.html');
    $wp_rewrite->flush_rules();
    update_option('permalink_structure','/%postname%.html');
}

1 Ответ

0 голосов
/ 02 апреля 2010

Вам не нужно разделять блоки кода только для добавления .html. Вы можете сделать что-то вроде:

$myThemePermalinks = get_option('myTheme_permalinks');
if ( ($myThemePermalinks =="/%postname%/" && get_option('permalink_structure') !== "/%postname%/" || !$myThemePermalinks) || ($myThemePermalinks == "/%postname%.html" && get_option('permalink_structure') !== "/%postname%.html") ) {

    if (preg_match('/\.html$/', $myThemePermalinks)) {
        $ext = '.html';
    } else {
        $ext = '';
    }

    require_once(ABSPATH . '/wp-admin/includes/misc.php');
    require_once(ABSPATH . '/wp-admin/includes/file.php');
    global $wp_rewrite;
    $wp_rewrite->set_permalink_structure('/%postname%/'.$ext);
    etc..// .
}

Вам не нужно использовать регулярные выражения, если вы не хотите, но вы поняли идею. Вы даже можете сделать условное сокращение, используя регулярное выражение для проверки опции .html.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...