Метод title()
для объекта Timber Post в большинстве случаев является просто проходом для собственной функции the_title()
Wordpress.
Вот соответствующий код для метода title()
:
public function title() {
if ( $rd = $this->get_revised_data_from_method('title') ) {
return $rd;
}
return apply_filters('the_title', $this->post_title, $this->ID);
}
Игнорируя оператор if (он предназначен для обновления предварительного просмотра сообщения), метод просто получает заголовок сообщения из базы данных и применяет к нему фильтр Wordpress the_title
.
Это означает, что вы можете изменить вывод заголовка, изменив фильтр the_title
.Этот предыдущий ответ StackOverflow содержит краткое описание того, как его использовать:
https://wordpress.stackexchange.com/questions/305706/how-to-change-the-blog-title-with-add-filter-details-below
Я не тестировал приведенный ниже код, но думаю, что-то подобное должно работать с учетом ваших требований:
add_filter('the_title', 'modify_all_titles', 10, 2);
function modify_all_titles($title, $id) {
return preg_replace( '|([^\s])\s+([^\s]+)\s*$|', '$1 $2', $title);
}
Важно отметить, что это изменит ВСЕ заголовки для ВСЕХ сообщений в каждом месте, где the_title()
или {{ post.title }}
используется на сайте.Если вы хотите ограничить изменение в определенных ситуациях, у вас есть два варианта:
Использовать условные выражения внутри функции фильтра, чтобы по-разному изменять заголовок (или нет) в различных обстоятельствах.Например, вы можете применить свои изменения только к определенному настраиваемому типу записи, возвращая заголовок по умолчанию во всех других экземплярах.
Определите новое значение контекста для измененного значения заголовка и используйте еговместо post.title
в вашем шаблоне ветки.
Например, в вашем шаблоне PHP вы можете добавить следующее после того, как $context
и $post
были определены, но до Timber::render()
:
$context['custom_title'] = preg_replace( '|([^\s])\s+([^\s]+)\s*$|', '$1 $2', $title);
Тогда в вашем файле Twig вы можете использовать {{ custom_title }}
вместо {{ post.title }}
.
Наконец, если вы находитесь в объектно-ориентированном PHP, вы можете расширить Timber/Post
класс , чтобы определить собственный метод title()
.Детали этого подхода выходят за рамки этого вопроса, но, возможно, стоит рассмотреть, если вы хотите использовать всю мощь древесины.