Cum să setezi structura permalink prin functions.php

16 oct. 2011, 00:19:43
Vizualizări: 21.5K
Voturi: 9

Configurez o rețea WordPress și doresc ca toate site-urile noi să aibă aceeași structură permalink (de exemplu "/%year%/%monthnum%/%postname%/"). Mă întreb dacă este posibil să fac acest lucru prin hooks sau modificări în functions.php, fără a depinde de utilizatori să aleagă acea structură.

0
Toate răspunsurile la întrebare 3
8
16

Puteți seta structura permanentelor de linkuri apelând metoda set_permalink_structure() a obiectului global $wp_rewrite.

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

Iată o versiune a codului pentru PHP < 5.3, în caz că primiți erori.

function reset_permalinks() {
    global $wp_rewrite;
    $wp_rewrite->set_permalink_structure( '/%year%/%monthnum%/%postname%/' );
}
add_action( 'init', 'reset_permalinks' );
16 oct. 2011 18:43:04
Comentarii

Copierea și lipirea codului tău generează o eroare, dar raționamentul funcționează! Mă întreb doar dacă întrebarea mea / intențiile mele sunt considerate bune practici...

Tomas Buteler Tomas Buteler
17 oct. 2011 00:26:21

Presupun că folosești PHP < 5.3, unde închiderile (funcții anonime) nu erau disponibile, așa că am editat răspunsul meu pentru a include metoda veche. Am testat ambele coduri în fișierul functions.php al temei mele, așa că spune-mi dacă funcționează. Un alt lucru pe care l-am observat este că am scris %year& în loc de %year%, așa că am corectat și asta.

soulseekah soulseekah
17 oct. 2011 05:01:18

Tomas, mulțumesc pentru acceptarea răspunsului. Mă bucur că am putut ajuta. În ceea ce privește bunele practici - cred că dacă obiectivul tău este să impui și să blochezi o astfel de structură de permalink-uri pe mai multe site-uri - atunci asta este justificabil; iar prin 'blochezi' înseamnă că codul nu va permite nicio modificare a structurii prin Admin, dacă asta este în regulă, atunci cred că este total acceptabil să faci acest lucru.

soulseekah soulseekah
17 oct. 2011 07:41:43

Rulez versiunea 5.2.17, deci asta explică situația! A doua versiune funcționează fără modificări :) Mulțumesc!

Tomas Buteler Tomas Buteler
18 oct. 2011 02:21:30

Funcționează, dar creează un conflict când administratorul salvează din pagina de permalink-uri (eroare 404 la articole). Apoi, când site-ul se încarcă (procesul hook init), structura de permalink-uri se schimbă din nou (eroare 404 la articole din nou). Folosirea $wp_rewrite->flush_rules(); rezolvă problema. Nu este o practică bună să o folosești pe init și să o rulezi de fiecare dată. Doar vizitarea paginii de permalink-uri va face treaba.

Sisir Sisir
28 apr. 2012 14:16:04

Intenția inițială a fost să dezactivez pagina de opțiuni pentru permalink-uri, așa că poate pot scăpa cu asta?

Tomas Buteler Tomas Buteler
28 apr. 2012 18:08:52

Ar trebui să fie apelat pe 'after_switch_theme' sau la activarea pluginului și urmat de 'flush_rewrite_rules()'

csstd csstd
27 oct. 2013 06:27:34

Există o mulțime de locuri unde poți conecta acest lucru pentru a obține rezultatele dorite

Xhynk Xhynk
4 iun. 2014 00:56:40
Arată celelalte 3 comentarii
0

Răspunsul anterior nu funcționează. Am găsit o soluție pură. Poți folosi Folosește acest cod. Va funcționa 100%. Mulțumesc

/**
 * Configurarea rescrierii, când tema este activată
 */
if (isset($_GET['activated']) && is_admin()) {
    global $wp_rewrite;
    $wp_rewrite->set_permalink_structure('/%postname%/');
    $wp_rewrite->flush_rules();
}

/**
* Redirecționează către pagina de setări Permalink.
* Altfel, regula de redirecționare nu va funcționa corect.
*/
function redirect_to_permalink() {

    wp_redirect('options-permalink.php');
}
add_action( 'after_switch_theme', 'redirect_to_permalink' );
31 aug. 2017 09:01:49
0
function setPermaLink(){
    // Setează structura permalink-urilor
    $ps = '/%category%/%postname%/';
    $permalink_structure = sanitize_option( 'permalink_structure', $ps);
    $blog_prefix = '/blog';
    $prefix = '/index.php';

    if ( ! empty( $permalink_structure ) ) {
        // Curăță structura permalink-urilor de caractere nedorite
        $permalink_structure = preg_replace( '#/+#', '/', '/' . str_replace( '#', '', $permalink_structure ) );
        if ( $prefix && $blog_prefix ) {
            // Adaugă prefixul corespunzător
            $permalink_structure = $prefix . preg_replace( '#^/?index\.php#', '', $permalink_structure );
        } else {
            $permalink_structure = $blog_prefix . $permalink_structure;
        }
    }

    // Aplică structura permalink-urilor și resetează regulile de rescriere
    $wp_rewrite->set_permalink_structure( $permalink_structure );
    flush_rewrite_rules();
}

setPermaLink();
12 sept. 2019 16:47:01