2011-10-11 18 views
6

Estoy tratando de crear un patrón de enlace permanente para un tipo personalizado, que incluye una de sus taxonomías. El nombre de la taxonomía es conocido desde el comienzo (así que no estoy tratando de agregar o mezclar todas sus taxonomías, solo una específica), pero el valor será dinámico, por supuesto.Wordpress tipo personalizado enlace permanente que contiene la bala de taxonomía

Normalmente, el enlace permanente de Tipo personalizado se crea usando el parámetro rewrite con el parámetro slug, pero no veo cómo podría agregar una variable dinámica allí.

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

que supongo se requiere una solución personalizada, pero no estoy seguro de lo que sería el mejor método no intrusivo.

¿Existe alguna práctica conocida para esto o alguien ha construido algo similar recientemente? Estoy usando WP 3.2.1 por cierto.

Respuesta

3

Después de más búsquedas logré crear una solución bastante elegante usando el filtro custom_post_link.

Digamos que tiene un tipo personalizado project con una taxonomía client. Añadir este gancho:

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

Entonces, al registrar el tipo personalizado, ajuste el arg rewrite así:

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

supongo que debería haber cavado más profundo antes de pedir, pero al menos tenemos una completa solución ahora.

+0

Gracias! Esto funcionó para mí. Tenía que asegurarme de que mi archivo '.htaccess' podía escribirse y luego entrar en 'Configuración> Enlaces permanentes' y '' Guardar cambios 'para que funcionara correctamente. ¿Para qué son '1' y' 3' en 'add_filter ('post_type_link', 'custom_post_link', 1, 3);'? ¡Gracias de nuevo! –

+0

Pensé que todo estaba funcionando, pero ahora recibo un error 404 en todas mis publicaciones normales y no personalizadas. He publicado una pregunta sobre esto si tiene alguna idea al respecto: http://stackoverflow.com/questions/9722984/wordpress-custom-permalink-with-dynamic-taxonomy-for-custom-post-type. –

+0

Recomiendo encarecidamente usar 'get_the_terms' en lugar de 'wp_get_object_terms' ya que 'get_the_terms' almacenará en caché el resultado. Al usar 'wp_get_object_terms', la consulta se ejecutará cada vez que se ejecute el filtro 'post_link', que es como 10 veces en la pantalla Editar publicación. Ref https://core.trac.wordpress.org/browser/tags/3.9.1/src/wp-includes/category-template.php#L1238 – TomHarrigan

Cuestiones relacionadas