Я разрабатываю плагин, который не использует пользовательский тип записи, а отдельные таблицы базы данных. Это плагин, который отображает список курсов со ссылками, которые ведут на разные страницы сведений о курсах, где пользователь может подписаться на курс.
В текущем состоянии я использую шорткод для получения данных плагинов на страницу с пользовательским шаблоном страницы (page-courses.php).
Теперь я хочу the_title()
динамически меняться в соответствии со страницей, которую показывает плагин (список курсов, страница сведений о курсе с формами, страница успеха отправки формы). Но всякий раз, когда я делаю это со следующим фильтром, ссылки на другие страницы в нижнем колонтитуле также меняются:
<?php
add_filter('the_title', 'custom_page_title');
function custom_page_title() {
return 'Custom Title';
}
редактировать
В footer.php у меня есть функция, которая включает ссылки нижнего колонтитула, wp_nav_menu()
чтобы я мог определить их в Appearance> Menus. Но с помощью фильтра выше все ссылки в нижнем колонтитуле также изменяются на «Пользовательский заголовок». Но я просто хочу изменить заголовок страницы, не затрагивая ссылки меню в нижнем колонтитуле.
При попытке добавить условный тег 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;
}
Файл page-listcourses.php - это пользовательский шаблон публикации, который я назначил статической странице с именем «Курсы».
Я предполагаю, что раньше это не работало, потому что имя статической страницы и имя файла пользовательского шаблона публикации были одинаковыми.
in_the_loop()
установлен на true
всякий раз, когда the_post()
срабатывает. Не углубляясь слишком глубоко в ядро, и зная, что навигационные меню сами по себе являются циклами , я предполагаю, что где-то на этом пути wp_nav_menu()
создается цикл, вызывающий in_the_loop()
возврат true
.