Integrare un proprio CMS in WordPress nel modo giusto

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.

Aztekium  ritteri.

4 thoughts on “Integrare un proprio CMS in WordPress nel modo giusto

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

%d blogger hanno fatto clic su Mi Piace per questo: