Wygląda na to, że wszystkie zasoby internetowe oparte na temacie usuwania niestandardowego ślimaka typu post, tj
yourdomain.com/CPT-SLUG/post-name
są obecnie bardzo nieaktualnymi rozwiązaniami, często odwołującymi się do instalacji przed wersją 3.5 WP. Powszechnym jest:
'rewrite' => array( 'slug' => false, 'with_front' => false ),
w ramach funkcji register_post_type. To już nie działa i wprowadza w błąd. Pytam więc społeczność w trzecim kwartale 2018 r. U progu WordPress 5 ...
Jakie są nowoczesne i wydajne sposoby usuwania informacji o typie posta z adresu URL postu o niestandardowym typie postu z argumentu o przepisaniu lub gdziekolwiek indziej?
AKTUALIZACJA: Wydaje się, że istnieje kilka sposobów zmuszenia tego do pracy z wyrażeniem regularnym. W szczególności odpowiedź od Jana Becka, jeśli konsekwentnie chcesz monitorować tworzenie treści, aby upewnić się, że nie powstają sprzeczne nazwy stron / postów ... Jestem jednak przekonany, że jest to poważna słabość rdzenia WP, w przypadku której należy sobie z nią poradzić. . Zarówno jako opcja / zaczep podczas tworzenia CPT lub zaawansowany zestaw opcji dla permalinków. Wesprzyj bilet na tor.
Przypis: Proszę wesprzeć ten bilet trac, oglądając / promując go: https://core.trac.wordpress.org/ticket/34136#ticket
źródło
Odpowiedzi:
Poniższy kod będzie działał, ale należy pamiętać, że konflikty mogą się łatwo zdarzyć, jeśli informacje o niestandardowym typie postu są takie same jak informacje o stronie lub postie ...
Najpierw usuniemy ślimak z bezpośredniego łącza:
Samo usunięcie ślimaka nie wystarczy. W tej chwili otrzymasz stronę 404, ponieważ WordPress oczekuje tylko, że posty i strony będą się tak zachowywać. Musisz także dodać następujące elementy:
Po prostu zmień „zdarzenia” na niestandardowy typ wpisu i możesz zacząć. Może być konieczne odświeżenie łączy bezpośrednich.
źródło
2 != count( $query->query )
. Z nginx możesz mieć $ query-> query asarray('page' => '', 'name' => '...', 'q' => '...')
. Więc @NateAllen, jakie jest znaczenie tego warunku?Wpisz następujący kod do rejestracji taksonomii.
Najważniejsze, co musisz zrobić po zmianie kodu
Po zmodyfikowaniu niestandardowego dokumentu taksonomii typu posta przejdź do Ustawienia> Odnośniki bezpośrednie i ponownie zapisz ustawienia , w przeciwnym razie strona 404 nie zostanie znaleziona.
Sprawdź tutaj najlepsze rozwiązanie: http://www.krazzycodes.com/how-to-remove-custom-post-type-taxonomy-base-from-url-in-wordpress/
źródło
Próbowałem to rozgryźć niedawno, a krótka odpowiedź z tego, co wiem, brzmi „ nie” . Przynajmniej nie z argumentu przepisz.
Długie wyjaśnienie staje się oczywiste, jeśli spojrzysz na rzeczywisty kod
register_post_type
w linii wp-include / post.php 1454 :Można zobaczyć je prefiksów
$args->rewrite['slug']
do%$post_type%
tagu przepisywania. Można by pomyśleć „ustawmy ślimak nanull
wtedy”, dopóki nie spojrzysz na kilka linijek w górę:Widać, że funkcja zawsze oczekuje wartości ślimaka, która nie jest pusta, a poza tym używa typu postu.
źródło
W odpowiedzi na moją poprzednią odpowiedź : możesz oczywiście ustawić
rewrite
parametr nafalse
podczas rejestrowania nowego typu posta i samodzielnie obsługiwać reguły przepisywaniaWidzisz, że
add_permastruct
połączenie nie obejmuje już ślimaka. Testowałem dwa scenariusze:źródło
Patrząc na odpowiedzi tutaj, myślę, że jest miejsce na lepsze rozwiązanie, które łączy niektóre rzeczy, których się nauczyłem powyżej, i dodaje automatyczne wykrywanie i zapobieganie duplikatom post ślimaków.
UWAGA: Upewnij się, że zmieniłeś „custom_post_type” dla własnej nazwy CPT w całym moim przykładzie poniżej. Istnieje wiele zdarzeń, a „znajdź / zamień” jest łatwym sposobem na złapanie ich wszystkich. Cały ten kod może przejść w pliku functions.php lub we wtyczce.
Krok 1: Wyłącz przepisywanie niestandardowego typu postu, ustawiając przepisywanie na „fałsz” po zarejestrowaniu postu:
Krok 2: Ręcznie dodaj nasze niestandardowe przepisywania na dole przepisywania WordPress dla naszego niestandardowego typu postu
UWAGA: W zależności od potrzeb możesz zmodyfikować powyższe przepisania (wyłączyć trackbacki? Kanały? Itp.). Reprezentują one „domyślne” typy przepisywania, które zostałyby wygenerowane, gdyby nie wyłączyć przepisywania w kroku 1
Krok 3: Ponownie dodaj permalinki do niestandardowego typu posta jako „ładna”
UWAGA: Możesz zatrzymać się tutaj, jeśli nie martwisz się, że użytkownicy utworzą sprzeczny (zduplikowany) post w innym typie postu, co spowoduje sytuację, w której tylko jeden z nich będzie mógł zostać załadowany, gdy strona zostanie poproszona.
Krok 4: Zapobiegaj powielaniu ślimaków postowych
UWAGA: Spowoduje to dołączenie ciągu „-duplikacja” na końcu każdego powielonego ślimaka. Ten kod nie może zapobiec duplikatom ślimaków, jeśli istnieją już przed wdrożeniem tego rozwiązania. Najpierw sprawdź, czy nie ma duplikatów.
Chciałbym usłyszeć od każdego, kto spróbuje to sprawdzić, czy to również dobrze dla nich zadziałało.
źródło
/%category%/%postname%/
. Podczas dodawania kodu, ślimaki CPT wyglądają OK (chociaż brakuje końcowego ukośnika) ... i działa również sprawdzanie konfliktu. Ale rzeczywiste wyniki posta na 404.Nie potrzebujesz tyle twardego kodu. Wystarczy użyć lekkiej wtyczki:
Ma konfigurowalne opcje.
źródło
Miałem te same problemy tutaj i wydaje się, że nie ma ruchu na stronie wordpress. W mojej szczególnej sytuacji, gdy dla pojedynczych postów na blogu potrzebne było takie rozwiązanie, struktura / blog /% postname% /
https://kellenmace.com/remove-custom-post-type-slug-from-permalinks/
zakończyło się w grupie 404
Ale wraz z tym cudownym podejściem, które nie wykorzystuje struktury wewnętrznej backendu dla blogu, w końcu działa jak charme. https://www.bobz.co/add-blog-prefix-permalink-structure-blog-posts/
Wielkie dzięki.
źródło
i możemy wprowadzić pewne zmiany w wyżej wspomnianej funkcji:
do:
w celu ustawienia właściwej wartości typu post_type.
źródło
To działało dla mnie:
'rewrite' => array('slug' => '/')
źródło
Dla każdego, kto to czyta, który miał problem z postami podrzędnymi, tak jak ja, znalazłem najlepszy sposób, aby dodać własne reguły przepisywania.
Głównym problemem, jaki miałem, było to, że WordPress traktuje przekierowanie ze stron o głębokości 2 poziomów (posty podrzędne) nieco inaczej niż traktuje 3 poziomy głębokości (posty podrzędne).
Oznacza to, że kiedy mam / post-type / post-name / post-child / mogę użyć / post-name / post-child i przekieruję mnie do tego z post-type z przodu, ale jeśli mam post-type / post-name / post-child / post-grandchild, wtedy nie mogę używać post-name / post-child / post-grandchild.
Patrząc na zasady przepisywania, wygląda na to, że pasuje do rzeczy innych niż pagename na pierwszym i drugim poziomie (myślę, że drugi poziom pasuje do załącznika), a następnie robi coś, aby przekierować cię do właściwego postu. Na trzech poziomach głębokości to nie działa.
Pierwszą rzeczą, którą musisz zrobić, to również usunąć link typu postu z dzieci. Ta logika powinna się tutaj zdarzyć, jeśli spojrzysz na odpowiedź Nate'a Allena powyżej:
Sam użyłem mieszanki różnych warunkowych, aby sprawdzić, czy post ma dzieci, a co nie, aby uzyskać właściwy bezpośredni link. Ta część nie jest zbyt trudna i znajdziesz przykłady ludzi, którzy robią to gdzie indziej.
Następnym krokiem jest jednak zmiana sytuacji od podanej odpowiedzi. Zamiast dodawać rzeczy do głównego zapytania (które działało dla niestandardowych postów i ich dzieci, ale nie dla dalszych dzieci) dodałem przepisanie, które poszło na dół do reguł WordPress, aby jeśli pagename nie wypisało się i miało zamiar uderzył 404, zrobiłoby to ostatnie sprawdzenie, czy strona w niestandardowym typie postu ma tę samą nazwę, w przeciwnym razie wyrzuciłaby 404.
Oto reguła przepisywania, której użyłem, zakładając, że „zdarzenie” to nazwa twojego CPT
Mam nadzieję, że to pomaga komuś innemu, nie mogłem znaleźć nic innego, co miałoby związek z dzieckiem postów dziecka i usunięciem ślimaka z nich.
źródło