Установка заголовка с помощью фильтра wp_title
Я хочу сделать что-то очень простое, но застрял в поисках того, где именно в WordPress нужно это реализовать.
Когда кто-то на моем сайте WordPress посещает страницу записи блога, я хочу, чтобы заголовок в записи блога заменял заголовок страницы.
Думаю, я могу сделать это с помощью хука фильтра wp_title?
Я думал о чем-то вроде следующего:
add_filter('wp_title', 'filter_pagetitle');
function filter_pagetitle($title) {
$the_post_id = get_the_ID();
$the_post_data = get_post($the_post_id);
$title = $the_post_data->post_title;
return $title;
}
Однако я немного растерян относительно того, куда мне это поместить. Я думал, что это должно быть в loop-single.php, так как я хочу применить это только к отдельным страницам, но я также видел, что это нужно разместить в functions.php внутри моей темы?
Буду благодарен за любую помощь :-)
Рич
Поскольку функция wp_title() обычно вызывается из файла header.php вашей темы, она выполняется на каждой странице WordPress (обычно на фронтенде). Поэтому разместите фильтр и функцию в файле functions.php вашей темы и просто проверьте, является ли текущая страница записью блога, перед изменением заголовка. Вот пример:
add_filter('wp_title', 'filter_pagetitle');
function filter_pagetitle($title) {
//проверяем, является ли это записью блога
if (!is_single())
return $title;
//если выполнение дошло до сюда, значит это запись блога - меняем заголовок
global $wp_query;
if (isset($wp_query->post->post_title)){
return $wp_query->post->post_title;
}
//если WordPress не может найти заголовок, возвращаем стандартный
return $title;
}

Это практически то, что, как я думал, должно сработать, но проблема в том, что functions.php, похоже, не считает это одиночной записью, поэтому просто возвращает переменную $title

это никак не связано с файлом functions.php, он вызывается, когда подключается ваш header.php, и если в нём есть wp_title().

Я согласен с подходом, но почему бы просто не использовать глобальную переменную $post
напрямую? Т.е. global $post; $title = $post->post_title;
Я не вижу необходимости вызывать get_post()
здесь.

@ChipBennett , Да, это сработало бы еще лучше, я просто следовал формату вопроса, обновил свой ответ

Два других момента: 1) тег шаблона wp_title()
уже возвращает заголовок записи в контексте отдельной записи блога или статической страницы, поэтому этот фильтр фактически избыточен. 2) вы можете рассмотреть возможность конкатенации возвращаемого содержимого $title
, чтобы не перезаписывать данные плагинов или других функций (SEO-плагинов и т.д.), фильтрующих заголовок документа.

глобальная переменная $post не сработала в моем случае, она возвращала ID, но это был ID последней добавленной в базу данных записи, а не той, которую мы просматриваем.

все эти комментарии — это то, что я уже пробовал, и, что странно, это не сработало. Думаю, проблема может быть в установке WordPress или теме. В любом случае, спасибо за помощь.
