2011-10-11 12 views
6

Sto provando a creare un modello di permalink per un tipo personalizzato, che include una delle sue tassonomie. Il nome della tassonomia è noto fin dall'inizio (quindi non sto cercando di aggiungere o mixare tutte le sue tassonomie, solo uno specifico), ma il valore sarà dinamico, ovviamente.Tipo personalizzato di Wordpress permalink contenente slug di tassonomia

Normalmente, il permalink Tipo personalizzato viene creato utilizzando il parametro rewrite con il parametro slug, ma non vedo come aggiungere una variabile dinamica.

http://codex.wordpress.org/Function_Reference/register_post_type

che sto indovinando è necessaria una soluzione personalizzata, ma non sono sicuro di quello che il miglior approccio non invadente sarebbe.

Esiste una pratica nota o qualcuno ha costruito qualcosa di simile recentemente? Sto usando WP 3.2.1 btw.

risposta

3

Dopo ulteriori ricerche sono riuscito a creare una soluzione abbastanza elegante utilizzando il filtro custom_post_link.

Diciamo che avete un project tipo personalizzato con un client tassonomia. Aggiungi questo gancio:

function custom_post_link($post_link, $id = 0) 
{ 
    $post = get_post($id); 

    if(!is_object($post) || $post->post_type != 'project') 
    { 
    return $post_link; 
    } 
    $client = 'misc'; 

    if($terms = wp_get_object_terms($post->ID, 'client')) 
    { 
    $client = $terms[0]->slug; 

    //Replace the query var surrounded by % with the slug of 
    //the first taxonomy it belongs to. 
    return str_replace('%client%', $client, $post_link); 
    } 

    //If all else fails, just return the $post_link. 
    return $post_link; 
} 

add_filter('post_type_link', 'custom_post_link', 1, 3); 

Poi, durante la registrazione del tipo personalizzato, impostare il rewrite arg in questo modo:

'rewrite' => array('slug' => '%client%') 

Credo che dovrei ho scavato più a fondo prima di chiedere, ma almeno abbiamo un completo soluzione ora.

+0

Grazie! Questo ha funzionato per me. Dovevo assicurarmi che il mio file '.htaccess' fosse scrivibile e poi andare in' Impostazioni> Permalink' e ''Salva modifiche'' perché funzionasse correttamente. Cosa sono '1' e' 3' per in add_filter ('post_type_link', 'custom_post_link', 1, 3); '? Grazie ancora! –

+0

Pensavo di avere tutto funzionante, ma ora ricevo un errore 404 su tutti i miei post regolari/non personalizzati. Ho postato una domanda a riguardo se hai qualche idea al riguardo: http://stackoverflow.com/questions/9722984/wordpress-custom-permalink-with-dynamic-taxonomy-for-custom-post-type. –

+0

Consiglio vivamente di utilizzare "get_the_terms" invece di "wp_get_object_terms" poiché "get_the_terms" memorizzerà il risultato nella cache. L'utilizzo di "wp_get_object_terms" comporterà la ricerca in esecuzione ogni volta che viene eseguito il filtro "post_link", che è pari a 10 volte nella schermata Modifica post. Ref https://core.trac.wordpress.org/browser/tags/3.9.1/src/wp-includes/category-template.php#L1238 – TomHarrigan