2011-10-11 13 views
6

Próbuję utworzyć wzorzec permalinka dla typu niestandardowego, który zawiera jedną ze swoich taksonomii. Nazwa taksonomii jest znana od samego początku (więc nie próbuję dodawać ani mieszać wszystkich jej taksonomii, tylko określonej), ale wartość będzie oczywiście dynamiczna.Wordpress Niestandardowy typ linku stałego zawierający taksonomię ślimakową

Zwykle link bezpośredni typu niestandardowego jest tworzony z użyciem parametru rewrite z parametrem slug, ale nie widzę możliwości dodania tam zmiennej dynamicznej.

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

Zgaduję, wymagane jest rozwiązanie niestandardowe, ale nie jestem pewien, co najlepsze unintrusive podejście byłoby.

Czy jest znana praktyka tego typu lub ktoś ostatnio coś takiego zbudował? Używam WP 3.2.1 btw.

Odpowiedz

3

Po kolejnych poszukiwaniach udało mi się stworzyć dość eleganckie rozwiązanie przy użyciu filtru custom_post_link.

Załóżmy, że masz niestandardowy typ project z Taksonomią client. Dodaj ten haczyk:

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); 

Następnie podczas rejestracji niestandardowego typu ustaw rewrite argumentu takiego:

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

Chyba powinienem był kopany głębiej przed pytaniem, ale przynajmniej mamy kompletny rozwiązanie teraz.

+0

Dzięki! To działało dla mnie. Musiałem się upewnić, że mój plik '.htaccess' jest zapisywalny, a następnie przejść do" Ustawienia> Permalinki "i" Zapisz zmiany ", aby działał poprawnie. Czym są '1' i' 3' w 'add_filter ('post_type_link', 'custom_post_link', 1, 3);'? Dzięki jeszcze raz! –

+0

Myślałem, że wszystko działa, ale teraz dostaję błąd 404 na wszystkich moich zwykłych/niestandardowych postach. Zadałem pytanie na ten temat, jeśli masz jakiekolwiek przemyślenia na ten temat: http://stackoverflow.com/questions/9722984/wordpress-custom-permalink-withdyndynamic-taxonomy-for-custom-post-type. –

+0

Zdecydowanie zaleca się używanie "get_the_terms" zamiast "wp_get_object_terms", ponieważ "get_the_terms" buforuje wynik. Użycie "wp_get_object_terms" spowoduje, że zapytanie będzie uruchamiane za każdym razem, gdy filtr "post_link" będzie działał, co jest 10 razy na ekranie Edit Post. Ref https://core.trac.wordpress.org/browser/tags/3.9.1/src/wp-includes/category-template.php#L1238 – TomHarrigan

Powiązane problemy