Come impostare la struttura del permalink tramite Functions.php


10

Sto creando una rete Wordpress e volevo che tutti i nuovi siti avessero la stessa struttura permalink (ovvero "/% year% /% monthnum% /% postname% /"). Mi chiedo se sia possibile farlo tramite hook o hack in funzioni.php, senza dover fare affidamento sugli utenti per scegliere quella struttura.

Risposte:


15

È possibile impostare la struttura del permalink chiamando il set_permalink_structure()metodo $wp_rewritedell'oggetto globale .

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

Ecco una versione PHP <5.3 del codice nel caso in cui si ricevano errori.

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

Copiare e incollare il codice genera un errore, ma la logica fa il trucco! Mi chiedo solo se le mie domande / intenzioni sono buone pratiche, però ...
Tomas Buteler,

1
Tomas, grazie per aver accettato la risposta. Felice di essere stato d'aiuto. Per quanto riguarda le buone pratiche - penso che se il tuo obiettivo è far rispettare e bloccare una struttura del genere tra i siti Web - ciò è giustificabile; e per "blocco" intendo che il codice non consentirà alcuna modifica alla struttura tramite l'amministratore, se va bene allora penso che sia del tutto ok farlo.
soulseekah,

1
Funziona ma provoca un conflitto quando admin salva dalla pagina di permalink (404 sui post). Quindi quando il sito viene caricato (hook di init di processo) la struttura del permalink cambia di nuovo (404 di nuovo sui post). usando $wp_rewrite->flush_rules();risolve il problema. Cattiva pratica per usarlo su init ed eseguirlo ogni volta. Basta visitare la pagina dei permalink per fare i trucchi.
Sisir,

1
L'intenzione era quella di disabilitare la pagina delle opzioni di permalink, quindi forse potrei cavarmela?
Tomas Buteler,

3
Dovrebbe essere chiamato su 'after_switch_theme' o sull'attivazione del plugin ed essere seguito da 'flush_rewrite_rules ()'
csstd

2

La risposta precedente non funziona. Ho ottenuto una soluzione pura. Può usare Usa questo codice. Funzionerà al 100%. Grazie

/**
 * 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();
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.