Ho già affrontato questo problema in passato, ma l’avevo risolto al di fuori di WordPress. La soluzione di allora si è dimostrata fragile e ha cessato di funzionare ad un cambio di hosting. Quindi ho deciso questa volta di risolvere la questione all’interno di WordPress (e magari tirarne fuori un plugin). La mia necessità in pratica è questa: fare in modo che una pagina con post_ID X di WordPress elabori tutte le richieste che pervengono ad essa e alle directory figlie ricorsivamente. In altre parole, creare un albero di pagine fittizie, virtuali, che vengono gestite tutte da una pagina madre. Se si implementa questa cosa puramente con mod_rewrite, WordPress esibisce la pagina 404. A nulla vale inserire la logica e la presentazione dei dati nel file del tema 404.php, perché vengono inoltrati al browser comunque gli header di una pagina non trovata, rendendo il lavoro inutile in termini di SEO.
Sapevo per certo che questa cosa è possibile, perché lo fanno per esempio i plugin di e-commerce, quindi indagando ho scoperto che si possono modificare le regole di rewrite interne per creare vere e proprie fake pages. Nel mio caso ecco cosa ho integrato nel file functions.php del tema:
add_filter('rewrite_rules_array', 'bwp_insertrules'); // Adding fake pages' rewrite rules function bwp_insertrules($rules) { $newrules = array(); $newrules['pagina-madre/(.+?)/?$'] = 'index.php'; return $newrules + $rules; } remove_filter('wp_head', 'rel_canonical'); add_filter('wp_head', 'bwp_rel_canonical'); function bwp_rel_canonical() { global $wp_the_query; if (!is_singular()) return; if (!$id = $wp_the_query->get_queried_object_id()) return; $link = trailingslashit(get_permalink($id)); // Make sure fake pages' permalinks are canonical if (strpos($_SERVER['REQUEST_URI'], 'pagina-madre')) $link .= user_trailingslashit(str_replace('/pagina-madre/', '', $_SERVER['REQUEST_URI'])); echo "<link rel='canonical' href='$link' />n"; }
In questo modo, tutte le richieste che iniziano con pagina-madre vengono ridirezionate alla pagina madre stessa. Creando un template apposito per quella pagina e analizzando la richiesta, si possono fornire i contenuti desiderati. Il codice soprastante infatti serve per inserire una nuova regola di rewrite interna e per scrivere nell’header il giusto URL canonical (se si usa un plugin per gestire questo aspetto, occorre disattivarne la funzione). In questo modo abbiamo innestato un nostro CMS in WordPress senza toccare l’.htaccess e senza creare file .php non usati da WordPress.
Questo è davvero interessante. Spero proprio che possa diventare un plug.
Il mio obiettivo a lungo termine è effettuare il porting del mio CMS (che alla fine non è altro che un phpmyadmin evoluto e semplificato) dentro WordPress come plugin. Questo è solo il punto di partenza…
Ho letto che se il tuo blog o la tua pagina internet hanno molti link a pagine che danno errore 404, che se ho capito bene sono inesistenti, il loro page rank diminuisce, ma perché? E come si fa ad evitarlo?
Il mio augurio è che possa diventare al più presto un plugin. Penso francamente che potrebbe avere un discreto seguito.