Czy to nie powinno być łatwe ?! Niestandardowy typ postu / niestandardowy bezpośredni link do taksonomii

11

To doprowadza mnie do szaleństwa. Spędzam dni próbując to naprawić i nie mogę zrozumieć, dlaczego jest to tak trudne, ponieważ z pewnością jest to bardzo powszechna struktura permalink!

Przejrzałem setki odpowiedzi i postów i żadna z nich nie rozwiązała problemu.

Chcę po prostu tę strukturę:

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

Więc osiągam następujące:

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

Za każdym razem, gdy próbuję czegoś, otrzymuję błędy 404 lub pagnacja nie działa.

Nie rozumiem, dlaczego to takie trudne!

Każda pomoc naprawdę doceniona!

Dziękuję Ci

================================================== ==== ================== INFORMACJE DODATKOWE ==================

Obecnie rejestruję typ postu i systematykę w następujący sposób:

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

Jeśli zarejestruję oba jako „literaturę”, otrzymam 404 na stronie mysite.com/literature, ale wyświetli się mój bezpośredni link jako: mysite.com/literature/books/mybook

Po skorzystaniu z porady na to pytanie - Niestandardowe typy postów, taksonomie i łącza bezpośrednie

Dodałem to do moich funkcji:

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

I zmieniłem typ postu na 'slug' => 'literature/%literature_category%' I zmieniłem taksonomię na'slug' => 'literature'

Działa to świetnie, z tym że w przypadku mysite.com/literaturepaginacji nie działa, więc pojawia się błąd 404 w następującym adresie URL:

mysite.com/literature/page/2/

fxfuture
źródło
Z ciekawości, czego próbowałeś do tej pory?
Matthew Boynes
Ta odpowiedź
sprawiła,
Fajnie, cieszę się, że zapytałem, że zaoszczędziłem trochę czasu!
Matthew Boynes

Odpowiedzi:

6

Postępuj zgodnie ze wskazówkami dotyczącymi tego pytania, tak jak już to zrobiłeś, ale dodaj to do swojego kodu:

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

Na koniec przejdź do Ustawienia> Permalinki i wciśnij Zapisz. Jeśli nadal nie działa, zapisz ponownie linki bezpośrednie. Czasami wydaje mi się, że musisz ich uratować dwa razy, ale kto wie. W każdym razie, daj mi znać, jak sobie radzisz. Zauważ, że zastosowanie ma Standardowa odpowiedź nr 1: To działa dla mnie ... ;-)

Z krainy TMI ...

Dla porównania, powodem, dla którego strony nie działają domyślnie, jest fakt, że WordPress stosuje regułę przepisywania literatury /% literatura_kategorii% /% book% /% page%, co ma całkowity sens, jeśli się nad tym zastanowić. Więc twoje domyślne linki bezpośrednie mają te konkurencyjne reguły w następującej kolejności:

[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]

Wszystko, co tak naprawdę tutaj robimy, to zmiana ich kolejności przez rozbrojenie tego ostatniego (możemy to zachować, ale potem każde ponowne napisanie ma jeszcze jedno wyrażenie regularne do uruchomienia przy ładowaniu strony) i dodanie go na początku tablicy.

Ciekawostka: jeśli kiedykolwiek masz „książkę” zatytułowaną „stronę” i ma ona wiele stron, to zamówienie będzie powodować konflikty, a kolejne strony nie będą działać!

Matthew Boynes
źródło
Kurcze, właśnie przyszło mi do głowy, że moja składnia jest tutaj nieprawidłowa. Zabawne, działa dla mnie, a kiedy to naprawię, nie działa. Będę się nad tym zastanawiał i zaktualizuję swoją odpowiedź, gdy się zorientuję ...
Matthew Boynes
Dzięki za pomoc Matthew. Próbowałem tego i niestety nie zadziałało. Dodałem więcej informacji do mojego pytania, które, mam nadzieję, lepiej to wyjaśnia!
fxfuture
1
Ok, przepraszam za zamieszanie. Miałem trochę gazu mózgowego (ostatnio musiałem mieć trochę fasoli). Moja odpowiedź została zaktualizowana i znów działa dla mnie. Pamiętaj, aby zaoszczędzić na swoich permalinkach.
Matthew Boynes
1
No dobrze, widziałem twoje zaktualizowane pytanie. Więc to nie tak, że / literatura / fikcja / strona / 2 nie działa, to, że / literatura / strona / 2 nie działa, prawda? Jeśli tak, to łatwa naprawa, zrobimy to samo na wyższym poziomie
Matthew Boynes
1
niech nam kontynuować tę dyskusję w czacie
Matthew Boynes