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

    • 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…

  1. 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?

Leave a Comment

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

Utilizzando il sito, accetti l'utilizzo dei cookie da parte nostra. 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