Я розробляю плагін, який використовує не спеціальний тип публікації, а окремі таблиці баз даних. Це плагін, який відображає перелік курсів із посиланнями, що ведуть на різні сторінки з деталізацією курсу, де користувач може потім підписатися на курс.
У поточному стані я використовую короткий код, щоб передати дані плагінів на сторінку із користувацьким шаблоном сторінки (page -ourse.php).
Тепер я хочу змінити the_title()
динамічно, відповідно до сторінки, на якій відображається плагін (список курсів, сторінка з деталями курсу з формами, сторінка успіху подання форми). Але щоразу, коли я роблю це за допомогою наступного фільтра, посилання на інші сторінки в нижньому колонтитулі також змінюються:
<?php
add_filter('the_title', 'custom_page_title');
function custom_page_title() {
return 'Custom Title';
}
Редагувати
У footer.php у мене є функція, яка включає посилання нижнього колонтитула, wp_nav_menu()
щоб я міг їх визначити у зовнішньому вигляді> меню. Але з фільтром, наведеним вище, усі посилання в нижньому колонтитулі також змінюються на "Спеціальний заголовок". Але я просто хочу змінити заголовок сторінки, не впливаючи на посилання меню в нижньому колонтитулі.
При спробі додати умовний тег in_the_loop()
посилання на колонтитул все ще впливають, хоча вони не перебувають у циклі.
<?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';
}
Це схоже на це питання: відфільтруйте проблему the_title в nav , просто так, що посилання, які постраждали, знаходяться у нижньому колонтитулі та in_the_loop()
не працюють.
Як я можу змінити the_title()
, впливаючи лише на те, що відображається заголовок поточної сторінки, не впливаючи на посилання в нижньому колонтитулі ?
Редагувати 2 - Рішення
Тому я нарешті спрацював:
<?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;
}
Сторінка файлу-listcourses.php - це спеціальний шаблон публікації, який я призначив статичній сторінці під назвою "Курси".
Я припускаю, що він не працював раніше, тому що назва статичної сторінки та назва файлу користувацького шаблону публікації були однаковими.
in_the_loop()
встановлюється, true
коли the_post()
вистрілюється. Не заглиблюючись занадто глибоко в серцевину і не знаючи, що навігаційні меню самі є петлями , я здогадуюсь, що десь по дорозі wp_nav_menu()
створюється цикл, викликаючи in_the_loop()
повернення true
.