Установка заголовка с помощью фильтра wp_title

8 мая 2012 г., 11:39:10
Просмотры: 31.8K
Голосов: 2

Я хочу сделать что-то очень простое, но застрял в поисках того, где именно в 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 внутри моей темы?

Буду благодарен за любую помощь :-)

Рич

1
Комментарии

Для вашего сведения, этот метод теперь устарел, см.: https://wordpress.stackexchange.com/a/228063/152624

Jesse Nickles Jesse Nickles
11 июн. 2024 г. 22:41:08
Все ответы на вопрос 1
8

Поскольку функция 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;
}
8 мая 2012 г. 11:53:18
Комментарии

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

Richard Bagshaw Richard Bagshaw
8 мая 2012 г. 12:51:49

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

Bainternet Bainternet
8 мая 2012 г. 15:55:47

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

Chip Bennett Chip Bennett
8 мая 2012 г. 17:19:02

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

Bainternet Bainternet
8 мая 2012 г. 18:05:16

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

Chip Bennett Chip Bennett
8 мая 2012 г. 18:11:10

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

Richard Bagshaw Richard Bagshaw
8 мая 2012 г. 19:22:20

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

Richard Bagshaw Richard Bagshaw
8 мая 2012 г. 19:23:14

Думаю, у вас могут быть дополнительные фильтры, уже подключенные к заголовку. Попробуйте отключить плагины и переключиться на Twenty Twelve, чтобы проверить, сохраняется ли проблема.

fischi fischi
19 февр. 2013 г. 18:27:51
Показать остальные 3 комментариев