Utworzyłem niestandardowy typ postu:
register_post_type('sample_post_type',array(
'labels' => array(
'name' => _x('Sample Posts', 'post type general name'),
'singular_name' => _x('Sample Post', 'post type singular name')
),
'public' => true,
'show_in_nav_menus' => false,
'exclude_from_search' => true
));
Jak mogę wyłączyć widok pojedynczego wpisu dla tego konkretnego typu wpisu? Wyświetlenie zwykłego 404 jest w porządku lub przekierowanie na stronę główną. Jest to wewnątrz wtyczki, więc nie mogę utworzyć pliku single-sample_post_type.php w celu ustawienia pustej strony.
źródło
get_current_user_id()
is_singular('post-type-slug')
wif()
warunkach zamiast 2 warunkach?Po prostu ustawiam argument
kiedy wywołasz register_post_type ()
źródło
Prostszym sposobem na to może być przekazanie następujących argumentów podczas rejestracji niestandardowego typu postu
źródło
publically_querable
mówiąc, by działało, musisz być prawdziwy.Jeden. Z pliku funkcji.
Dwa. Z pliku single.cpt.php:
źródło
single-cpt_name.php
pliku, nie możesz tego zrobić. Jeśli umieścisz tę funkcję w prostym pliku wtyczki, możesz aktywować / dezaktywować bez edytowania żadnego pliku.Opierając się na naprawdę dobrej odpowiedzi Svena, przepisałem jego funkcję, aby ułatwić dodawanie wielu typów postów za pomocą
in_array()
instrukcji if, a następnie przekierowanie na stronę archiwum zamiast na stronę główną.(nawiasem mówiąc, myślę, że ustawienie
query_var
i / lubpublically_queryable
false spowoduje wyłączenie nie tylko pojedynczych widoków, ale także natywnego widoku archiwum, nadpisywanie'has_archive' => true
. W takim przypadku nadal możesz skonfigurować niestandardowe WP_query i utworzyć własną stronę archiwum w szablon, ale główne zapytanie już tego nie zrobi, prawda?)źródło
Przetestowano wszystkie wyżej wymienione, a rzeczywiste rozwiązanie jest prostsze niż jakiekolwiek sugerowane przekierowania.
Aby archiwum było dostępne i zawierało listę elementów, pojedynczy post nie był dostępny i automatyczne przekierowanie do zestawu 404
podczas rejestracji CPT. Jeśli ustawisz wartość
publicly_queryable
false, twoje archiwa zostaną przekierowane do domu, inne kombinacje nie będą działać. Ustaw naquery_var
false i to wszystko.Oto pełny CPT https://gist.github.com/danyj/bfd038d3c8d578548c4d700bd0a7942a
patrz wiersz 50 https://gist.github.com/danyj/bfd038d3c8d578548c4d700bd0a7942a#file-thz_cpt_items_single_view_redirect-php-L50
jak stwierdzono tutaj
https://codex.wordpress.org/Function_Reference/register_post_type
źródło
W przypadku, gdy chcesz całkowicie wyłączyć niestandardowy typ pojedynczego widoku posta w interfejsie użytkownika, ale móc wyświetlać stronę archiwum, sprawy stają się nieco skomplikowane.
Ustawianie
publicly_queryable
sięfalse
alborewrite
dofalse
uniemożliwi wyświetlania pojedynczej i archiwum pogląd. Wregister_post_type
argumentach funkcji nie ma flagi, aby zapobiec tworzeniu tylko reguł przepisywania pojedynczego widoku.https://github.com/WordPress/WordPress/blob/5.2.3/wp-includes/class-wp-post-type.php#L540
Możesz jednak usunąć tag przepisywania po zarejestrowaniu typu posta, co pozostawi nietknięte reguły przepisywania widoku archiwum, ale usuniesz tylko reguły przepisywania pojedynczego widoku.
Kolejną zaletą jest to, że od teraz możesz tworzyć proste strony WordPress za pomocą struktury permalink typu post po zdarzeniu,
event/simple-page
która może być pomocna w złożonych witrynach.Pamiętaj, aby opróżnić reguły przepisywania po modyfikacji kodu.
źródło