¿No debería ser esto fácil? Tipo de publicación personalizada / enlace permanente de taxonomía personalizada

11

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

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

Entonces logro 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 obtengo errores 404 o el paginació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 registro ambos 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 publicaciones personalizadas, taxonomías y enlaces permanentes

He agregado 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 la mysite.com/literaturepaginación no funciona, así que obtengo un error 404 en la siguiente URL:

mysite.com/literature/page/2/

fxfuture
fuente
Por curiosidad, ¿qué has probado hasta ahora?
Matthew Boynes
Esta respuesta me consiguió la más cercana: wordpress.stackexchange.com/questions/5308/… , pero luego no funcionó con la paginación y el complemento sugerido tampoco funcionó
fxfuture
Genial, me alegro de haberlo preguntado, ¡eso me ahorró algo de tiempo!
Matthew Boynes

Respuestas:

6

Siga los consejos sobre esta pregunta como ya lo hizo, pero agregue esto a su 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, vaya a Configuración> Permalinks y presione guardar. Si aún no funciona, guarde sus enlaces permanentes nuevamente. 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 se aplica la respuesta estándar n. ° 1 de informática: funciona para mí ... ;-)

Desde la tierra de TMI ...

Como referencia, la razón por la cual las páginas no funcionan de forma predeterminada es que WordPress establece una regla de reescritura para la literatura /% literature_category% /% book% /% page%, lo que tiene mucho sentido si lo piensa. Por lo tanto, sus enlaces permanentes predeterminados tienen estas reglas en 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 el último (podemos mantenerlo, pero luego cada reescritura tiene una expresión regular más para ejecutar en la carga de la página) y agregarlo al comienzo de la matriz.

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 posteriores no funcionarán!

Matthew Boynes
fuente
Gosh, se me ocurrió que mi sintaxis estaba mal aquí. Lo suficientemente divertido, funciona para mí y cuando lo arreglo, no funciona. Lo seguiré y actualizaré mi respuesta cuando lo resuelva ...
Matthew Boynes
Gracias por tu ayuda Matthew. Lo intenté y desafortunadamente no funcionó. ¡Agregué más información a mi pregunta, que espero la explique mejor!
fxfuture
1
Ok, mis disculpas por la confusión. Tenía un poco de gas cerebral allí (debe haber tenido algunos frijoles cerebrales recientemente). Mi respuesta ha sido actualizada, y nuevamente funciona para mí. Recuerde guardar sobre sus enlaces permanentes.
Matthew Boynes
1
Oh ok, vi tu pregunta actualizada. Entonces, no es que / literatura / ficción / página / 2 no funcione, es que / literatura / página / 2 no funciona, ¿no es así? Si es así, es una solución fácil, haremos lo mismo en un nivel
Matthew Boynes
1
vamos a continuar esta discusión en el chat
Mateo Boynes