Come modificare la struttura dei permalink per i custom post type e le relative tassonomie?

20 set 2011, 14:35:16
Visualizzazioni: 35.9K
Voti: 12

Questo è un repost di una domanda precedente, ma vorrei entrare più nei dettagli ora per poter risolvere completamente il problema.

Dunque, con i post (normali) modificare il permalink è semplice come andare in Impostazioni > Permalink e cambiarlo come si preferisce, ad esempio usando il diffuso %category%/%postname%.html. Questo funziona. Se solo fosse altrettanto facile per i custom post type e le relative tassonomie.

Ecco cosa vorrei ottenere:

  1. http://mywordpress.com/portfolio.html - Mostra tutti i post in tutte le categorie.
  2. http://mywordpress.com/portfolio/music/ - Mostra tutti i post in questa categoria.
  3. http://mywordpress.com/portfolio/music/trance/ - Mostra tutti i post in questa categoria (figlia).
  4. http://mywordpress.com/portfolio/music/trance/Tiesto.html - Mostra il post.

Ecco cosa ho fatto finora:

  1. Prima ho creato un custom_post_type chiamato project e una taxonomy project_category.
  2. Ho creato una pagina Portfolio e le ho assegnato un Template di Pagina che elencherà tutti i post con post_type = project. Come posso aggiungere .html al permalink delle pagine? Ora il link è http://mywordpress.com/portfolio mentre voglio http://mywordpress.com/portfolio.html. Questo dovrebbe risolvere il primo problema.
  3. Poi le cose si complicano, perché non sappiamo in anticipo quante sottocategorie ci saranno, forse non ce ne saranno affatto. Quindi la struttura che cerchiamo è portfolio/(PERCORSO CATEGORIA DALLA PRINCIPALE ALLA FIGLIA)/post.html. Sono ancora bloccato a questo punto. Penso che dovrei in qualche modo ottenere l'ultima categoria aggiunta al percorso e passarla alla project_category, che dovrebbe portare a un file taxonomy.php dove posso elaborarla correttamente.
  4. Non ho affrontato neanche questo, ma dovrebbe avere a che fare con %postname%.html alla fine di qualcosa.

Spero che il mio problema sia chiaro e che ci siano sviluppatori coraggiosi che mi aiuteranno a risolvere questo problema che mi ha già tenuto occupato per QUATTRO giorni interi!

3
Commenti

La soluzione che ho dato nell'ultima domanda avrebbe dovuto funzionare in quel modo, se l'avessi implementata correttamente. L'unica cosa è che non puoi ottenere la parte html

Manny Fleurmond Manny Fleurmond
20 set 2011 17:43:40

Sì ma era vincolata a un percorso specifico, quindi solo categoria/sottocategoria/pagina mentre potrebbero non esserci sottocategorie o addirittura di più. Questa è più dinamica.

Mark Mark
20 set 2011 18:58:51

Oppure non l'ho implementata correttamente ;)

Mark Mark
20 set 2011 18:59:01
Tutte le risposte alla domanda 3
1

Ok, penso di poter avere una soluzione. Non ho idea se questo sia il modo giusto per ottenere questo risultato, ma per ora è l'unica cosa che sembra funzionare.

add_filter('rewrite_rules_array', 'mmp_rewrite_rules');

function mmp_rewrite_rules($rules) {
    $newRules                               = array();
    $newRules['portfolio/(.+)/(.+?).html$'] = 'index.php?project=$matches[2]';
    $newRules['portfolio/(.+)/?$']          = 'index.php?project_category=$matches[1]'; 

    return array_merge($newRules, $rules);
}


add_filter('request', 'mmp_rewrite_request');

function mmp_rewrite_request($vars) {
    if (isset($vars['project_category'])) {
        if (strpos($vars['project_category'], '/') !== false) {
            $categories = explode('/', $vars['project_category']);
            $vars['project_category'] = $categories[count($categories) - 1];
        }
    }

    return $vars;
}
20 set 2011 17:28:13
Commenti

Il filtro di richiesta è un buon modo per filtrare se stiamo chiedendo una categoria (un termine in realtà) e un articolo. Permette di aggiungere solo una regola di riscrittura e ottenere la pagina dell'articolo indipendentemente dal fatto che l'articolo sia in una categoria, una sottocategoria o non lo sia affatto.

ZalemCitizen ZalemCitizen
30 ott 2018 13:14:54
0

Dopo averci sbattuto la testa per ore, ho trovato questo plugin molto utile.

https://wordpress.org/plugins/custom-post-type-permalinks/

Di seguito lo screenshot delle opzioni che offre.

Schermata delle opzioni del plugin per i permalink dei custom post type

7 apr 2016 04:57:39
0

2 Metodi Differenti:

*Vedi le note in fondo a questo post.


ad esempio, vuoi avere una struttura di permalink come questa:
/CATEGORIA_PRINCIPALE/SOTTOCAT_2/Un_altra_SOTTOCAT/mio-articolo

Innanzitutto, potresti dover impostare i permalink su /%category%/%postname%. Poi...




METODO 1:

crea categorie STANDARD (CATEGORIA_PRINCIPALE, SOTTOCAT_1, ecc..), e registra il CUSTOM POST, includendo questo parametro:

'taxonomies'    => array('category'..)

e usa questi codici per modificare i permalink: https://wordpress.stackexchange.com/a/195643/33667
Poi, dopo aver pubblicato un CUSTOM POST (se associato a una categoria), l'URL sarà:
esempio.com/CATEGORIA_PRINCIPALE/SOTTOCAT_1/mio-articolo



METODO 2:

(p.s. questo metodo non è consigliato se prevedi di pubblicare centinaia o migliaia di articoli)

registra il CUSTOM POST (chiamato CATEGORIA_PRINCIPALE), includendo questi parametri:

    "supports"      => array('page-attributes'......
    "hierarchical"  => true,

poi, pubblica i custom post in questo modo: Esempio di struttura gerarchica di custom post in WordPress
(cioè pubblica diversi custom post, chiamati SOTTOCAT_2, SOTTOCAT_1... Successivamente, quando pubblichi un altro post, scegli SOTTOCAT_2 come genitore.





p.s.
1) Se sei un principiante, rivedi: Registrare un CUSTOM POST e Registrare un CUSTOM POST con TASSONOMIA
2) se avrai bisogno di funzionalità di ricerca per i livelli secondari, allora usa una query di ricerca personalizzata

10 nov 2014 12:23:37