Як встановити структуру постійної посилання за допомогою функції.php


10

Я налаштовував Wordpress Network і хотів, щоб усі нові сайти мали однакову структуру постійних посилань (тобто "/% рік% /% місяцьnum% /% посада% /"). Мені цікаво, чи можна це зробити за допомогою гачків або злому в function.php, не покладаючись на те, щоб користувачі вибирали цю структуру.

Відповіді:


15

Ви можете встановити структуру постійної посилання за допомогою set_permalink_structure()методу глобального $wp_rewriteоб'єкта.

add_action( 'init', function() {
    global $wp_rewrite;
    $wp_rewrite->set_permalink_structure( '/%year%/%monthnum%/%postname%/' );
} );

Ось PHP <5.3 версія коду, якщо ви отримуєте помилки.

function reset_permalinks() {
    global $wp_rewrite;
    $wp_rewrite->set_permalink_structure( '/%year%/%monthnum%/%postname%/' );
}
add_action( 'init', 'reset_permalinks' );

Копіювання та вставлення коду генерує помилку, але обґрунтування робить трюк! Мені цікаво лише, чи моє запитання / наміри є гарною практикою, хоча ...
Томаш Бутелер

1
Томаш, дякую за прийняття відповіді. Рада, що допомогла. Що стосується належних практик - я думаю, що якщо ваша мета - нав'язати та заблокувати таку структуру постійних посилань на веб-сайтах, - це виправдано; і під "блокуванням" я маю на увазі, що код не дозволить змінити структуру через адміністратора, якщо це нормально, я вважаю, що це цілком нормально.
соулсееках

1
Це працює, але викликає конфлікт, коли адміністратор зберігає зі сторінки постійної посилання (404 на повідомленнях). Потім, коли сайт завантажується (обробляє ініціальний гачок), структура постійної посилання знову змінюється (знову 404 у публікаціях). за допомогою $wp_rewrite->flush_rules();вирішує проблему. Погана практика використовувати його на init та запускати його щоразу. Просто відвідування сторінки постійних посилань зробить трюки.
Сисір

1
Весь намір полягав у тому, щоб вимкнути сторінку параметрів постійних посилань, тож, можливо, я можу піти з нею?
Томаш Бутелер

3
Його слід викликати на "after_switch_theme" або на активацію плагіна, після чого слід "flush_rewrite_rules ()"
csstd

2

Попередній відповідь не працює. Я отримав чисте рішення. Можна використовувати Використовувати цей код. Це буде працювати 100%. Дякую

/**
 * Rewrite set up, when theme activate i mean
 */
if (isset($_GET['activated']) && is_admin()) {
    global $wp_rewrite;
    $wp_rewrite->set_permalink_structure('/%postname%/');
    $wp_rewrite->flush_rules();
}

/**
* Redirect to Permalink setting Page.
* Otherwise Redirect rule will not work Properly.
*/
function redirect_to_permalink() {

    wp_redirect('options-permalink.php');
}
add_action( 'after_switch_theme', 'redirect_to_permalink' );

0
function setPermaLink(){
    $ps = '/%category%/%postname%/';
    $permalink_structure = sanitize_option( 'permalink_structure', $ps);
    $blog_prefix = '/blog';
    $prefix = '/index.php';

    if ( ! empty( $permalink_structure ) ) {
        $permalink_structure = preg_replace( '#/+#', '/', '/' . str_replace( '#', '', $permalink_structure ) );
        if ( $prefix && $blog_prefix ) {
            $permalink_structure = $prefix . preg_replace( '#^/?index\.php#', '', $permalink_structure );
        } else {
            $permalink_structure = $blog_prefix . $permalink_structure;
        }
    }

    $wp_rewrite->set_permalink_structure( $permalink_structure );
    flush_rewrite_rules();
}

setPermaLink();
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.