Динамическое изменение заголовка страницы из плагина

24 дек. 2016 г., 07:35:30
Просмотры: 20.5K
Голосов: 6

Каждая страница WordPress может иметь два заголовка:

  1. Заголовок страницы/записи, который отображается на странице/в записи через вызов функции the_title()

  2. HTML тег <title></title>, который отображает заголовок в верхней части браузера

Я разрабатываю плагин, который в определенный момент должен динамически изменять заголовок страницы (точнее, оба заголовка, описанных выше).

Для шага 1, я нашел несколько решений на Stack Overflow (таких как это или это). Они отлично подходят только для шага 1.

Для шага 2, я нашел это решение; если кратко, оно работает так:

add_filter('wp_title', 'change_page_title');
function change_page_title ($title) {

    // Выполняем некоторую магию, изменяем $title и возвращаем его
    return $title;
}

Но предложенное решение у меня не работает; под "не работает" я имею в виду, что фильтр не вызывает связанную функцию. Я не уверен, в чем проблема; может быть, это потому, что фильтр вызывается из плагина, а не из темы? (К сведению, у меня нет доступа к файлам темы, поэтому это должно быть сделано из плагина).

Как я могу это реализовать? Как изменить заголовок браузера страницы динамически из плагина?

Спасибо.

0
Все ответы на вопрос 2
2

У записи или страницы может быть только один заголовок, тег <title> является заголовком документа.

Фильтр wp_title изменяет вывод функции wp_title(), которая раньше использовалась для вывода заголовка документа. В WordPress 4.1 была добавлена поддержка тега заголовка в темах, и вместо wp_title() теперь используется wp_get_document_title(). Таким образом, если ваша тема поддерживает title-tag, фильтр wp_title не действует, но вы можете использовать другие фильтры:

pre_get_document_title для установки нового заголовка

add_filter( 'pre_get_document_title', 'cyb_change_page_title' );
function cyb_change_page_title () {

    return "Пользовательский заголовок";

}

document_title_separator для изменения разделителя заголовка

add_filter('document_title_separator', 'cyb_change_document_title_separator');
function cyb_change_document_title_separator ( $sep ) {

    return "|";

}

documente_title_parts для изменения различных частей заголовка: самого заголовка, номера страницы, слогана и названия сайта.

add_filter( 'document_title_parts', 'cyb_change_document_title_parts' );
function cyb_change_document_title_parts ( $title_parts ) {

    $title_parts['title'] = 'Пользовательский заголовок';
    $title_parts['page'] = 54;
    $title_parts['tagline'] = "Пользовательский слоган";
    $title_parts['site'] = "Мой сайт"; // Когда не на главной странице

    return $title_parts;

}

Примечание: Вы можете использовать current_theme_supports( 'title-tag' ), чтобы проверить, поддерживает ли тема title-tag или нет.

24 дек. 2016 г. 09:08:30
Комментарии

но как передавать уникальные метаданные страницы в функции фильтров для каждой отдельной страницы?

Tintinabulator Zea Tintinabulator Zea
22 дек. 2018 г. 22:40:33

Вы можете использовать функции типа is_page(), is_single(), is_singular() и так далее, чтобы проверять текущую страницу или запись.

cybmeta cybmeta
24 дек. 2018 г. 10:29:14
2

Используйте этот код в вашем файле page.php или на странице, которую вы хотите изменить <pre> <title><?php wp_title(); ?> | <?php bloginfo(‘name’); ?></title> </pre>

24 дек. 2016 г. 08:17:30
Комментарии

Вы имеете в виду в теме? У меня нет доступа к файлам темы.

Greeso Greeso
24 дек. 2016 г. 08:24:55

сработало. большое спасибо

Faisal Ramzan Faisal Ramzan
11 янв. 2020 г. 02:00:26