Jakiego kodu PHP można użyć do pobrania bieżącej nazwy strony w motywie WordPress?
Wszystkie rozwiązania, które widziałem do tej pory ( the_title()
, get_page()->post_name
, get_post()
, itd.) Nie działają dla strony, która zawiera wpisy pocztowych. Wszystkie zwrócą nazwę ostatniego wpisu na blogu.
Mówiąc inaczej, załóżmy, że masz stronę utworzoną w WordPress o nazwie „Moje wiadomości”. Ta strona jest ustawiona jako „strona postu”. Dodaj kilka postów do strony. Teraz, jakiego interfejsu API można użyć do pobrania ciągu „my-news” zamiast nazwy najnowszego postu?
Znalazłem następującą zmienną, która wydaje się działać.
$wp_query->queried_object->post_name
W rzeczywistości jest to przyjazna dla adresu URL wersja nazwy strony (slug), której też szukałem. Zostało to przetestowane z domyślnym szablonem ( dwadzieścia dziesięć ). Naprawdę nie jestem pewien, dlaczego dwie podane poniżej zmienne nie działają w mojej witrynie. Dzięki zatrzaskowi za print_r()
końcówkę .
Dlaczego ta informacja jest tak głęboko ukryta?
źródło
Odpowiedzi:
Globalna zmienna WordPress
$pagename
powinna być dla Ciebie dostępna. Właśnie wypróbowałem tę samą konfigurację, którą określiłeś.$pagename
jest zdefiniowana w pliku wp-obejmuje / theme.php, wewnątrz funkcjiget_page_template()
, która jest oczywiście wywoływana przed analizowaniem plików motywów strony, więc jest dostępna w dowolnym miejscu w szablonach stron.Chociaż wydaje się, że nie jest to udokumentowane,
$pagename
zmienna jest ustawiana tylko wtedy, gdy używasz bezpośrednich linków. Wydaje mi się, że dzieje się tak dlatego, że jeśli ich nie używasz, WordPress nie potrzebuje informacji o stronie, więc go nie konfiguruje.$pagename
nie jest ustawiona, jeśli używasz tej strony jako statycznej strony tytułowej.To jest kod wewnątrz /wp-includes/theme.php, który używa rozwiązania, które wskazałeś, gdy
$pagename
nie można go ustawić:$ nazwa strony = get_query_var ('nazwa strony'); if (! $ pagename && $ id> 0) {// Jeśli statyczna strona jest ustawiona jako strona główna, $ pagename nie zostanie ustawiona. Pobierz go z odpytywanego obiektu $ post = $ wp_query-> get_queried_object (); $ pagename = $ post-> post_name; }
źródło
$pagename = $wp_query->queried_object->post_name;
po prostu nie zapomnij ustawićglobal $wp_query;
wcześniej!Moje podejście do uzyskania nazwy ślimaka strony:
źródło
Ok, musisz pobrać tytuł strony przed pętlą.
Sprawdź odniesienie: http://codex.wordpress.org/Function_Reference/WP_Query#Properties .
Zrób
przed pętlą, aby zobaczyć wszystkie wartości
$wp_query
obiektu.źródło
To zadziałało dla mnie.
Jeśli dobrze rozumiem, chcesz uzyskać nazwę strony na stronie zawierającej wpisy postów.
źródło
Możesz uzyskać bieżącą stronę, post lub niestandardowy typ posta za pomocą zmiennej globalnej
$post
:Uwaga: w funkcji lub klasie musisz określić
global $post;
przed próbą użycia$post
.Jeśli masz pętle na swojej stronie, upewnij się, że kończysz każdą pętlę,
wp_reset_postdata();
aby$post
przywrócić domyślny wyświetlany element (stronę).Uwaga, zmienna „post_title” jest również dostępna dla dowolnej niestandardowej pętli / zapytania ... w tym elementów menu i załączników multimedialnych ... wszystko w WordPress jest „postem”.
źródło
Jeśli chcesz uzyskać dostęp do bieżącej strony z pliku functions.php (więc przed zapełnieniem pętli, przed
$post
, przed$wp_query
zainicjowaniem itp.), Naprawdę nie masz innego wyboru, jak tylko uzyskać dostęp do samych zmiennych serwera i wyodrębnij żądaną stronę z ciągu zapytania.Zauważ, że jest to „głupie” rozwiązanie. Nie wie, na przykład, że strona ze slugiem „wkrótce” też jest
p=6
. Zakłada się, że ustawienia permalinku są ustawione napagename
(które i tak powinny być!).Mimo to może być użyteczną małą sztuczką, jeśli masz kontrolowany scenariusz. Używam tego w sytuacji, gdy chcę przekierować niezalogowanych odwiedzających do strony „wkrótce”; ale muszę się upewnić, że nie wrzucam ich do przerażającej „pętli przekierowań”, więc muszę wykluczyć stronę „wkrótce” z tej reguły:
źródło
Uważam, że motyw startowy Roots ma fantastyczną funkcję, aby uzyskać bieżący tytuł strony. Jest bardzo łatwy do hakowania, zakrywa wszystkie podstawy i można go łatwo używać z
wp_title
haczykiem.źródło
Spróbuj tego:
źródło
Mam prostsze rozwiązanie.
Pobierz zwróconą wartość nazwy strony z wp_title (). Jeśli jest pusta, wydrukuj nazwę strony domowej, w przeciwnym razie powtórz wartość wp_title ().
Pamiętaj, aby usunąć separację z pierwszym argumentem, a następnie ustawić display na false, aby użyć go jako danych wejściowych dla zmiennej. Następnie po prostu umieść kod między tagami nagłówka itp.
Działało to dla mnie nie lada gratką i upewniając się, że pierwsza jest zadeklarowana w sekcji, w której chcesz wyodrębnić
$title
, można to dostosować, aby zwracały różne zmienne.źródło
Musimy tylko użyć zmiennej globalnej „post”:
Spowoduje to powtórzenie tytułu bieżącej strony / posta.
źródło
Posługiwać się:
źródło
Wydaje się, że jest to najłatwiejsze w użyciu:
źródło
Pokaż tytuł przed rozpoczęciem pętli:
źródło
Jedną z opcji, jeśli szukasz rzeczywistej strony, której dotyczyło zapytanie, a nie identyfikatora strony lub informacji o pracy, jest przechwycenie zapytania:
W ramach swojej funkcji masz dostęp do obiektu $ wp i możesz pobrać nazwę strony lub nazwę postu za pomocą:
Z drugiej strony, jeśli naprawdę potrzebujesz danych postu, pierwszym miejscem, w którym możesz je zdobyć (i prawdopodobnie w tym kontekście, najlepszym) jest:
Wreszcie zdaję sobie sprawę, że prawdopodobnie nie było to pytanie OP, ale jeśli szukasz nazwy strony administratora , użyj globalnej
$pagenow
.źródło
W pętli WordPress :
Spowoduje to wyświetlenie aktualnego tytułu strony.
Dla porównania: get_the_title ()
źródło
Oto moja wersja:
get_query_var ('nazwa strony') właśnie podał mi informacje o stronie. Tak więc powyższe zastępuje wszystkie myślniki i sprawia, że pierwsza litera każdego słowa jest wielka - dzięki czemu można go faktycznie użyć jako tytułu.
źródło
Oto, czego ostatecznie używałem, od 2018:
źródło
Znalazłem tę funkcję w kodeku WordPress ,
zostać zapytanym
który jest opakowaniem dla
$wp_query->get_queried_object
.Ten post skierował mnie we właściwym kierunku, ale wydaje się, że potrzebuje tej aktualizacji.
źródło
Działa to również, jeśli jesteś w pliku functions.php. Nie jest to najlepsze podejście, ponieważ musisz używać tablicy globalnej, ale działa.
Najpierw musimy dodać filtr. Musi istnieć lepszy filtr niż template_include, ale nie znam ich wszystkich. Wskaż mi właściwy.
Unikaj bezpośredniego używania zmiennej
Teraz możesz skorzystać z funkcji
get_current_page()
w dowolnej innej części pliku functions.php.źródło