¡¿No debería ser fácil ?! Tipo de entrada personalizado / taxonomía personalizada enlace permanente

10

Así que esto me está volviendo absolutamente loco. He pasado días tratando de solucionar esto y no puedo entender por qué esto es tan difícil, ¡seguramente esta es una estructura muy común de enlace permanente!

Revisé cientos de respuestas y publicaciones y ninguna de ellas parece resolver el problema.

Simplemente quiero esta estructura:

mysite.com/custom-post-type/custom-taxonomy-term/post-name

Así logré lo siguiente:

mysite.com/literature - all literature posts
mysite.com/literature/fiction - all literature posts with 'fiction' term
mysite.com/literature/fiction/mybook - the post

Cada vez que intento algo, recibo errores 404 o la combinación no funciona.

¡No entiendo por qué esto es tan difícil!

Cualquier ayuda realmente apreciada!

Gracias

=============================================== ======= ================== INFORMACIÓN ADICIONAL ===================

Actualmente estoy registrando el tipo de publicación y la taxonomía de la siguiente manera:

register_post_type('literature',$args);
'rewrite' => array('slug' => 'literature/books','with_front' => false),

register_taxonomy('literature_category',array('literature'), array(
'rewrite' => array( 'slug' => 'literature','with_front' => false ),

Si me registro como "literatura", obtengo un 404 en la página mysite.com/literature pero esto muestra mi enlace permanente como: mysite.com/literature/books/mybook

Después de seguir los consejos sobre esta pregunta, Tipos de correos personalizados, taxonomías y enlaces permanentes

He añadido esto a mis funciones:

function filter_post_type_link($link, $post) {
    if ($post->post_type != 'literature')
        return $link;

    if ($cats = get_the_terms($post->ID, 'literature_category'))
        $link = str_replace('%literature_category%', array_pop($cats)->slug, $link);
    return $link;
}
add_filter('post_type_link', 'filter_post_type_link', 10, 2);

Y cambié mi tipo de publicación a 'slug' => 'literature/%literature_category%' Y cambié mi taxonomía a 'slug' => 'literature'

Esto funciona muy bien, excepto que en mysite.com/literature la paginación no funciona, por lo que recibo un error 404 en la siguiente url:

mysite.com/literature/page/2/

    
pregunta fxfuture 30.01.2012 - 00:43

1 respuesta

6

Siga los consejos en esta pregunta como ya lo hizo, pero agrega esto a tu código:

add_action( 'generate_rewrite_rules', 'fix_literature_category_pagination' );
function fix_literature_category_pagination( $wp_rewrite ) {
    unset($wp_rewrite->rules['literature/([^/]+)/page/?([0-9]{1,})/?$']);
    $wp_rewrite->rules = array(
        'literature/?$' => $wp_rewrite->index . '?post_type=literature',
        'literature/page/?([0-9]{1,})/?$' => $wp_rewrite->index . '?post_type=literature&paged=' . $wp_rewrite->preg_index( 1 ),
        'literature/([^/]+)/page/?([0-9]{1,})/?$' => $wp_rewrite->index . '?literature_category=' . $wp_rewrite->preg_index( 1 ) . '&paged=' . $wp_rewrite->preg_index( 2 ),
    ) + $wp_rewrite->rules;
}

Por último, ve a Configuración > Permalinks y pulsa guardar. Si todavía no funciona, guarde sus enlaces permanentes de nuevo. A veces siento que tienes que salvarlos dos veces, pero quién sabe. De todos modos, déjame saber cómo te va. Tenga en cuenta que la respuesta # 1 de Computer Science se aplica: Funciona para mí ... ;-)

Desde la tierra de TMI ...

Para referencia, la razón por la que las páginas no funcionan de manera predeterminada es que WordPress coloca una regla de reescritura para la literatura /% literature_category% /% book% /% page%, lo que hace total sentido si lo piensas. Por lo tanto, sus enlaces permanentes predeterminados tienen estas reglas de competencia en este orden:

[literature/([^/]+)/([^/]+)(/[0-9]+)?/?$] => index.php?literature_category=$matches[1]&book=$matches[2]&page=$matches[3]
[literature/([^/]+)/page/?([0-9]{1,})/?$] => index.php?literature_category=$matches[1]&paged=$matches[2]

Todo lo que realmente estamos haciendo aquí es cambiar el orden de estos desarmando este último (podemos mantenerlo, pero luego cada reescritura tendrá una expresión regular más para ejecutar en la carga de la página) y agregarlo al principio del array.

Dato curioso: Si alguna vez tiene un "libro" titulado "página" y tiene varias páginas, este orden entrará en conflicto y sus páginas subsiguientes no funcionarán.

    
respondido por el Matthew Boynes 30.01.2012 - 01:55

Lea otras preguntas en las etiquetas