Cara mengatur struktur permalink melalui functions.php

10

Saya sedang menyiapkan Jaringan Wordpress dan ingin semua situs baru memiliki struktur permalink yang sama (yaitu "/% tahun% /% monthnum% /% postname% /"). Saya bertanya-tanya apakah ini mungkin dilakukan melalui kait atau hacks di functions.php, tanpa harus bergantung pada pengguna untuk memilih struktur itu.

Tomas Buteler
sumber

Jawaban:

15

Anda dapat mengatur struktur permalink dengan memanggil set_permalink_structure()metode $wp_rewriteobjek global .

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

Berikut ini adalah versi kode PHP <5.3 jika Anda mengalami kesalahan.

function reset_permalinks() {
    global $wp_rewrite;
    $wp_rewrite->set_permalink_structure( '/%year%/%monthnum%/%postname%/' );
}
add_action( 'init', 'reset_permalinks' );
soulseekah
sumber
Menyalin dan menempel kode Anda menghasilkan kesalahan, tetapi alasannya berhasil! Saya hanya ingin tahu apakah pertanyaan / niat saya adalah praktik yang baik, ...
Tomas Buteler
1
Tomas, terima kasih telah menerima jawabannya. Senang bisa membantu. Adapun praktik yang baik - saya pikir jika tujuan Anda adalah untuk menegakkan dan mengunci struktur permalink di situs web - maka itu dapat dibenarkan; dan dengan 'mengunci' maksud saya kode itu tidak akan mengizinkan perubahan pada struktur melalui Admin, jika itu baik maka saya rasa tidak apa-apa untuk melakukan ini.
soulseekah
1
Ini berfungsi tetapi menyebabkan konflik ketika admin menyimpan dari halaman permalink (404 pada posting). Kemudian ketika situs memuat (proses init hook) struktur permalink berubah lagi (404 pada posting lagi). menggunakan $wp_rewrite->flush_rules();memecahkan masalah. Praktik buruk untuk menggunakannya di init dan menjalankannya setiap saat. Cukup mengunjungi halaman permalinks akan melakukan trik.
Sisir
1
Seluruh niatnya adalah untuk menonaktifkan halaman opsi permalinks, jadi mungkin saya bisa lolos begitu saja?
Tomas Buteler
3
Itu harus dipanggil pada 'after_switch_theme' atau pada aktivasi plugin dan diikuti oleh 'flush_rewrite_rules ()'
csstd
2

Jawaban Sebelumnya tidak berfungsi. Saya mendapatkan solusi murni. Dapat menggunakan Gunakan kode ini. Ini akan bekerja 100%. Terima kasih

/**
 * 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' );
Islam yang indah
sumber
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();
Ricardo Boavida
sumber