Permalink yapısını function.php ile ayarlama


10

Bir Wordpress Ağı kuruyorum ve tüm yeni sitelerin aynı kalıcı bağlantı yapısına sahip olmasını istedim (yani "/% yıl% /% monthnum% /% postname% /"). Bunun, bu yapıyı seçmek için kullanıcılara güvenmek zorunda kalmadan, function.php'deki kancalar veya hack'lerle mümkün olup olmadığını merak ediyorum.

Yanıtlar:


15

Genel nesnenin set_permalink_structure()yöntemini çağırarak kalıcı bağlantı yapısını ayarlayabilirsiniz $wp_rewrite.

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

Hatalar almanız durumunda kodun <5.3 sürümü.

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

Kodunuzu kopyalayıp yapıştırmak bir hata yaratır, ancak mantık işe yarar! Sadece sorum / niyetimin iyi bir uygulama olup olmadığını merak ediyorum ...
Tomas Buteler

1
Tomas, cevabı kabul ettiğin için teşekkürler. Yardım etmekten memnunum. İyi uygulamalara gelince - eğer amacınız web siteleri arasında böyle bir kalıcı bağlantı yapısını uygulamak ve kilitlemekse - bu haklı olabilir; ve 'kilitle' demek istediğim, bu kod Yönetici aracılığıyla yapı üzerinde herhangi bir değişikliğe izin vermeyecektir.
soulseekah

1
Çalışır, ancak yönetici kalıcı bağlantı sayfasından (yayınlarda 404) kaydettiğinde çakışmaya neden olur. Daha sonra site yüklendiğinde (işlem başlangıç ​​kancası) kalıcı bağlantı yapısı tekrar değişir (tekrar direklerde 404). kullanarak $wp_rewrite->flush_rules();sorunu çözer. Başlangıçta kullanmak ve her seferinde çalıştırmak için kötü uygulama. Sadece kalıcı bağlantılar sayfasını ziyaret etmek hileler yapacak.
Sisir

1
Tüm amaç kalıcı bağlantılar seçenekleri sayfasını devre dışı bırakmaktı, belki ondan kurtulabilirim?
Tomas Buteler

3
'After_switch_theme' veya eklenti aktivasyonunda çağrılmalı ve ardından 'flush_rewrite_rules ()'
csstd

2

Önceki Yanıt çalışmıyor. Saf bir çözüm buldum. Kullanabilir Bu kodu kullanın. % 100 çalışacaktır. Teşekkürler

/**
 * 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();
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.