xlthlx

I am not an early bird or a night owl. I am some form of permanently exhausted pigeon


Inserire variabili personalizzate e riscrivere gli url in WordPress


12 dicembre 2011

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 flushRules(){
	global $wp_rewrite;
	$wp_rewrite->flush_rules();
}
add_filter('init','flushRules');

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

function add_query_vars($aVars) {
    $aVars[] = "varuno";
    $aVars[] = "vardue";
    return $aVars;
}
add_filter('query_vars', '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 add_rewrite_rules($aRules) {
$specialpages = query_posts(array(
'post_type' => 'page',
'posts_per_page' => -1,
'meta_query' => array(
	'relation' => 'OR',
	
	array(
		'value' => 'miotemplateuno.php',
	),
	array(
		'value' => 'miotemplatedue.php',
			)
		)
	) );
	
	foreach($specialpages as $post) :
	setup_postdata($post);

		$slug= $post->post_name;
		
		$aNewRules = array(''.$slug.'/([^/]+)/([^/]+)/?$' => 'index.php?pagename='.$slug.'&varuno=$matches[1]&vardue=$matches[2]');
		//Questa seconda regola permette di conservare la paginazione
		$aNewRules1 = array(''.$slug.'/([^/]+)/([^/]+)/page/([^/]+)/?$' => 'index.php?pagename='.$slug.'&varuno=$matches[1]&vardue=$matches[2]&paged=$matches[3]');
		
		$aRules = $aNewRules + $aNewRules1 + $aRules;
	
	endforeach;
	wp_reset_query();
return $aRules;
}

add_filter('rewrite_rules_array', 'add_rewrite_rules');

//Chiudo la condizione
}

Il risultato è che se assegnate ad una pagina il template miotemplateuno.php o miotemplatedue.php, potrete usare la query http://url_miosito/slug_pagina/varuno=valoreuno&vardue=valoredue e l’url verrà riscritto come http://url_miosito/slug_pagina/valoreuno/valoredue/.

Commenta


Utilizzando questo blog, accetti l'utilizzo dei cookie. Maggiori informazioni

Questo sito utilizza i cookie per fonire la migliore esperienza di navigazione possibile. Continuando a utilizzare questo sito senza modificare le impostazioni dei cookie o clicchi su "Accetta" permetti al loro utilizzo.

Chiudi