Tworzę wtyczkę, która nie używa niestandardowego typu postu, ale osobne tabele bazy danych. Jest to wtyczka, która wyświetla listę kursów z linkami prowadzącymi do różnych stron szczegółowych kursów, na których użytkownik może zapisać się na kurs.
W obecnym stanie używam krótkiego kodu, aby przenieść dane wtyczek na stronę z niestandardowym szablonem strony (page-course.php).
Chcę teraz zmieniać się the_title()
dynamicznie, zgodnie ze stroną wyświetlaną przez wtyczkę (lista kursów, strona szczegółów kursu z formularzami, strona z pomyślnym przesłaniem formularza). Ale ilekroć zrobię to z następującym filtrem, linki do innych stron w stopce również się zmieniają:
<?php
add_filter('the_title', 'custom_page_title');
function custom_page_title() {
return 'Custom Title';
}
Edytować
W footer.php mam funkcję, która zawiera linki stopki, dzięki wp_nav_menu()
czemu mogę je zdefiniować w Wyglądzie> Menu. Ale z powyższym filtrem wszystkie linki w stopce również zmieniają się na „Tytuł niestandardowy”. Chcę tylko zmienić tytuł strony, nie wpływając na łącza menu w stopce.
Próba dodania znacznika warunkowego in_the_loop()
nadal wpływa na łącza stopki, chociaż nie znajdują się one w pętli.
<?php
add_action( 'loop_start', 'set_custom_title' );
function set_custom_title() {
if ( in_the_loop() ) {
add_filter( 'the_title', 'custom_page_title' );
}
}
function custom_page_title() {
return 'Custom Title';
}
Podobnie jest z tym pytaniem: filtruj problem z tytułem w nav , po prostu linki, których dotyczą, znajdują się w stopce i in_the_loop()
nie działają.
Jak mogę zmienić the_title()
, wpływając tylko na tytuł wyświetlanej strony, nie wpływając na linki w stopce ?
Edycja 2 - Rozwiązanie
W końcu udało mi się to uruchomić:
<?php
add_action( 'loop_start', 'set_custom_title' );
function set_custom_title() {
add_filter( 'the_title', 'wpse83525_filter_the_title', 10, 2 );
}
function wpse83525_filter_the_title( $title, $id ) {
if ( 'page-listcourses.php' == get_post_meta( $id, '_wp_page_template', true ) ) {
return 'Custom Title';
}
return $title;
}
Plik page-listcourses.php jest niestandardowym szablonem posta, który przypisałem statycznej stronie o nazwie „Kursy”.
Zakładam, że wcześniej nie działał, ponieważ nazwa strony statycznej i nazwa niestandardowego szablonu postu były takie same.
in_the_loop()
jest ustawiony na true
za każdym razem, gdy the_post()
jest uruchamiany. Nie zagłębiając się zbyt głęboko w rdzeń i wiedząc, że menu nawigacyjne same są pętlami , domyślam się, że gdzieś po drodze wp_nav_menu()
tworzy pętlę, powodując in_the_loop()
powrót true
.