Skip to content

Inserire variabili personalizzate e riscrivere gli url in WordPress

Attenzione: questo articolo è stato scritto più di 11 anni fa, alcune informazioni potrebbero essere obsolete.

I permalink pretty sono una delle funzionalità più apprezzabili di WordPress. La cosa interessante è che possibile utilizzarli anche quando è necessario usare variabili personalizzate per esempio per un plugin.
Nel mio caso dovevo agganciarmi, per i contenuti della pagina, a un servizio simil SOAP esterno, a cui dovevo per forza di cose inviare dei precisi parametri.
La soluzione a questo genere di problema in realtà è abbastanza semplice: vanno riscritti i permalink per le pagine dove vanno usati quei parametri.
Per comodità ho utilizzato, per intercettare gli slug di pagina, il nome del file del template di pagina.
Prima di tutto, poiché la funzione non ha bisogno di essere richiamata nell’amministrazione, tutto il codice va inserito in una condizione:

if (!is_admin()) {

poi va svuotata la cache delle regole di rewrite di WordPress (questa parte di codice è indispensabile, ma va usata con parsimonia)

function wporg_flush_rules(){
global $wp_rewrite;
$wp_rewrite->flush_rules();
}
add_filter('init','wporg_flush_rules');

Vanno poi aggiunte le variabili tra quelle gestite da WordPress. In questo caso, ne aggiungo due:

function wporg_add_query_vars($aVars) {
    $aVars[) = "var-one";
    $aVars[) = "var-two";
    return $aVars;
}
add_filter('query_vars', 'wporg_add_query_vars');

Infine si vanno a intercettare quelle pagine che hanno dei precisi template di pagina (sempre due) e si assegnano le nuove regole di rewrite:

function wporg_add_rewrite_rules($rules) {

$specialpages = query_posts(array(
'post_type' => 'page',
'posts_per_page' => -1,
'meta_query' => array(
'relation' => 'OR',

array(
'value' => 'template-one.php',
),
array(
'value' => 'template-two.php',
)
)
) );

foreach($specialpages as $post) :
setup_postdata($post);

$slug= $post->post_name;

$new_rules = array(''.$slug.'/([^/)+)/([^/)+)/?$' => 'index.php?pagename='.$slug.'&var-one=$matches[1)&var-two=$matches[2)');
//Questa seconda regola permette di conservare la paginazione
$new_rules_1 = array(''.$slug.'/([^/)+)/([^/)+)/page/([^/)+)/?$' => 'index.php?pagename='.$slug.'&var-one=$matches[1)&var-two=$matches[2)&paged=$matches[3)');

$rules = $new_rules + $new_rules_1 + $rules;

endforeach;
wp_reset_query();
return $rules;
}

add_filter('rewrite_rules_array', 'wporg_add_rewrite_rules');

}

Il risultato è che se assegnate ad una pagina il template template-one.php o template-two.php, potrete usare la query https://my_site_url/page/var-one=value-one&var-two=value-two e l’url verrà riscritto come https://my_site_url/page/value-one/value-two/.

Articolo precedente

Articolo successivo

Discussione

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.