Come abilitare permalink gerarchici per tassonomie gerarchiche

16 mag 2011, 01:08:49
Visualizzazioni: 18.1K
Voti: 3

Se hai una categoria chiamata "term" e una sottocategoria chiamata "subterm", puoi accedere ai post di subterm all'indirizzo /cat/subcat. Ma questo non funziona subito con le tassonomie personalizzate. Sono accessibili all'indirizzo /taxonomy/subterm, ma non /taxonomy/term/subterm.

Hanno discusso di questo nel Wordpress Trac (http://core.trac.wordpress.org/ticket/12659), e sembra che abbiano una soluzione, ma dato che non ho mai usato il Trac e non capisco completamente il suo linguaggio (diff, ecc.), ho bisogno che qualcuno più esperto mi dica come implementarlo. C'è del codice lì che devo incollare nei file core di WordPress? È già implementato e posso aggiungere qualcosa al functions.php del mio tema?

Se possibile preferirei non modificare alcun file core. Aiuto!

0
Tutte le risposte alla domanda 4
5
11

Questo è implementato in WordPress dalla versione 3.1.

Quando registri la tua tassonomia, assicurati di impostare rewrite hierarchical a true così come la tassonomia stessa:

<?php
register_taxonomy('genre',array('book'), array(
'hierarchical' => true, // rende la tassonomia gerarchica nell'interfaccia utente
'labels' => $labels,
'show_ui' => true,
'query_var' => true,
'rewrite' => array( 'hierarchical' => true ), // abilita URL gerarchici
));
16 mag 2011 01:42:31
Commenti

Esiste un modo per aggiungere un parametro a una tassonomia personalizzata già registrata? Tutte le mie tassonomie sono state create con un plugin, quindi sarebbe bello se potessi aggiungere qualcosa a functions.php che semplicemente aggiunga 'rewrite' => array( 'hierarchical' => true ) a quelle tassonomie.

supertrue supertrue
16 mag 2011 02:06:17

Sto ancora cercando la risposta a questa domanda—vedi http://wordpress.stackexchange.com/questions/17444/add-overwrite-a-parameter-on-an-existing-post-type-taxonomy

supertrue supertrue
17 mag 2011 18:50:30

Probabilmente è più semplice aggiungere le tassonomie da soli e non usare il plugin.

Milo Milo
17 mag 2011 18:54:08

Il problema è che lavoro con altre persone che hanno bisogno dell'interfaccia grafica. Il parametro di riscrittura gerarchica è l'unica cosa che molti di questi plugin ancora non supportano.

supertrue supertrue
17 mag 2011 23:21:33

@supertrue - hanno bisogno di poter registrare le tassonomie tramite un'interfaccia grafica? Una volta registrata una tassonomia, potranno usare l'interfaccia grafica per gestire i termini. Voglio solo assicurarmi che non ci sia confusione - non ho mai incontrato una situazione in cui fosse necessario aggiungere nuove tassonomie così frequentemente. Un'intera tassonomia, non solo i termini all'interno della tassonomia.

Milo Milo
18 mag 2011 01:35:15
0

Esiste un modo per aggiungere un parametro a una tassonomia personalizzata già registrata? Tutte le mie tassonomie sono state create con un plugin, quindi sarebbe utile se potessi aggiungere qualcosa al file functions.php che aggiunga semplicemente 'rewrite' => array( 'hierarchical' => true ) a quelle tassonomie.

Dovresti essere in grado di utilizzare register_taxonomy per ri-registrare la tassonomia che desideri modificare.

http://core.trac.wordpress.org/browser/tags/3.4.2/wp-includes/taxonomy.php#L305

ATTENZIONE: Codice non testato!
(Solo a memoria, principalmente. Non mi assumo responsabilità per siti danneggiati.):

function reregister_taxonomy() {
    # i post type a cui la tassonomia è registrata
    $post_types = array('post');
    # imposta questo sul nome della tassonomia
    $tax_name = 'NOME_DELLA_TASSONOMIA_DA_MODIFICARE';
    # carica la tassonomia già creata come array così possiamo
    # passarla nuovamente come $args a register_taxonomy
    $tax = (array)get_taxonomy($tax_name);

    if ($tax) {
        # modifica le necessità gerarchiche
        $tax['hierarchical'] = true;
        $tax['rewrite']['hierarchical'] = true;

        # modifica le migliorie gerarchiche (queste potrebbero essere ignorate)
        $tax['labels']['parent_item'] = sprintf(__("Genitore %s"),
            $tax->labels->singular_name);
        $tax['labels']['parent_item_colon'] = sprintf(__("Genitore %s:"),
            $tax->labels->singular_name);

        # converte le capacità in array come previsto da register_taxonomy
        $tax['capabilities'] = (array)$tax['cap'];
        # converte le etichette in array
        $tax['labels'] = (array)$tax['labels'];
        # registra la tassonomia con le nuove impostazioni
        register_taxonomy($tax_name, array('post'), $tax);
    }
}
# azione init con priorità alta così altre tassonomie sono caricate
# in alternativa si potrebbe fare con l'hook `registered_taxonomy`
add_action('init', 'reregister_taxonomy', 9999);

Solo dopo aver scritto questo codice mi sono reso conto che questa domanda era vecchia di un anno e mezzo, magari qualcuno lo troverà utile comunque.

9 nov 2012 00:50:42
0

Per far funzionare i permalink gerarchici è necessario aggiungere delle regole di riscrittura. Sono riuscito a mettere insieme del codice che rende funzionante un custom post type con una tassonomia personalizzata che supporta termini padre/figlio riflessi nei permalink. Non è perfetto, ma funziona!

function keha_add_rewrite_rules() {
        // Aggiunge regole di riscrittura per gestire la gerarchia nei permalink
        add_rewrite_rule( '^posttype_slug/(.+?)/(.+?)/(.+?)$', 'index.php?taxonomy=$matches[1]&taxonomy=$matches[2]&posttype=$matches[3]', 'top' );
        add_rewrite_rule( '^posttype_slug/(.+?)/(.+?)/$', 'index.php?posttype=$matches[2]', 'top' );
        add_rewrite_rule( '^posttype_slug/(.+?)/(.+?)/(.+?)$', 'index.php?posttype=$matches[3]', 'top' );
        add_rewrite_rule( '^posttype_slug/(.+?)/(.+?)/?$', 'index.php?taxonomy=$matches[2]', 'top' );
        add_rewrite_rule( '^posttype_slug/(.+?)$', 'index.php?taxonomy=$matches[1]', 'top' );
}
// Aggiunge l'azione per le regole di riscrittura durante l'init
add_action('init', 'keha_add_rewrite_rules');

Visualizza il mio esempio funzionante su Github:

https://github.com/keha76/WordPress-CPT-Hierarchical-Taxonomy-Permalinks

22 set 2013 20:49:26
2

Grazie a @anubhava

Un piccolo studio sulle API di Rewrite di WP ha permesso di trovare la soluzione.

1) Ho creato un URL rewrite personalizzato e l'ho inserito nel mio functions.php

function services_rewrite_basic() {
  add_rewrite_rule('^services/.*', 'index.php?page_id=110&level=$matches[1]&level=$matches[1]&level=$matches[1]', 'top');
}
add_action('init', 'services_rewrite_basic');

2) Infine ho semplicemente salvato la pagina dei permalink senza alcuna modifica e ha funzionato.

20 set 2016 18:37:59
Commenti

Potrei sbagliarmi, ma credo che questo non tenga conto delle traduzioni, vero? Tranne il fatto che lo slug della tassa è uguale a "services" in tutte le lingue...

wbq wbq
28 nov 2019 18:19:24

services è il nome della pagina (nome del file, ad esempio services_page.php)

Fury Fury
29 nov 2019 13:39:11