Смена заголовка страницы во время её создания

Вопрос или проблема

У меня есть этот замечательный кусок кода, который выполняется в плагине и генерирует страницу с помощью шорткода.

...
   if(count($bb_job)>0){
            ?>
            <script type="text/javascript">
                let job_title="<?php echo $bb_job -> job_title ?>";
                if(job_title) {
                    console.log('название работы: ' + job_title)
                    // Изменить заголовок страницы на название работы
                    document.title = `Доска вакансий: ${job_title} - Заголовок страницы`
                }
            </script>
            <div class="bbjob">
....

Код в основном просто изменяет заголовок документа, используя доступную PHP переменную ‘bb_job’

Я хотел бы изменить фактический заголовок HTML-документа на уровне WordPress, используя что-то вроде этого:

<?php 
                    function custom_document_title( $title_parts, $new_title ) {
                        $title_parts['title'] = $new_title;
                        return $title_parts;
                    }

                    add_filter( 'document_title_parts', 'custom_document_title', 1000, 2 );

Но когда я пытаюсь использовать любой из доступных фильтров, ничего не происходит. Я подозреваю, что я пытаюсь выполнить фильтр слишком поздно?

Я хочу изменить только заголовок этой одной страницы, чтобы он отражал содержимое страницы, когда она генерируется.

Самая страница – это одна страница WordPress, с динамическим контентом.

Я полагаю, что мог бы добавить фильтр для всего сайта в файл functions.php темы и проверить, нахожусь ли я на странице ‘Доска вакансий’, прежде чем изменить заголовок, но как мне передать новое название вакансии в качестве параметра?

Ответ или решение

Чтобы изменить заголовок страницы на уровне WordPress в зависимости от динамического контента, созданного вашим шорткодом, вы можете использовать фильтры WordPress, чтобы задать заголовок на определенной странице. Вот как можно это сделать:

  1. Создание специального фильтра: Вам нужно создать функцию для изменения заголовка, которая будет вызываться во время формирования страницы.

  2. Использование глобальной переменной: Чтобы передать заголовок работы в функцию, вы можете использовать глобальную переменную или использовать hooks в WordPress.

Вот пример, который поможет вам реализовать это:

// functions.php

// Глобальная переменная для хранения заголовка работы
global $job_title;

// Функция для изменения заголовка страницы
function custom_document_title( $title_parts ) {
    global $job_title; // Получаем доступ к глобальной переменной
    if ( is_page('job-board') ) { // Проверьте, что мы на нужной странице
        // Изменяем заголовок страницы, если заголовок работы установлен
        if ( !empty($job_title) ) {
            $title_parts['title'] = 'Job Board: ' . $job_title;
        }
    }
    return $title_parts;
}

// Регистрация фильтра
add_filter( 'document_title_parts', 'custom_document_title', 1000 );

// Шорткод, который генерирует контент страницы
function job_board_shortcode() {
    global $job_title; // Получаем доступ к глобальной переменной

    // Ваш существующий код
    if (count($bb_job) > 0) {
        // Устанавливаем заголовок работы в глобальную переменную
        $job_title = $bb_job->job_title;

        // Выводим скрипт для отладки (вы можете убрать это на продакшене)
        ?>
        <script type="text/javascript">
            let job_title = "<?php echo esc_js($job_title); ?>"; // Экранируем для JS
            if (job_title) {
                console.log('job title: ' + job_title);
                // Изменяем заголовок страницы в JS (это не обязательно)
            }
        </script>
        <div class="bbjob">
            <!-- Здесь ваш контент -->
        </div>
        <?php
    }
}

// Регистрация шорткода
add_shortcode('job_board', 'job_board_shortcode');

Пояснение:

  1. Глобальная переменная $job_title:
    Мы создаем глобальную переменную $job_title, чтобы передавать заголовок работы в функцию изменения заголовка.

  2. Проверка страницы:
    Используем is_page('job-board'), чтобы проверить, что мы на нужной странице (замените ‘job-board’ на слаг вашей страницы). Это необходимо для того, чтобы изменения заголовка применялись только на нужной странице.

  3. Функция шорткода:
    В функции шорткода мы проверяем, есть ли работы, и если да, устанавливаем заголовок работы в глобальную переменную.

  4. Экранирование вывода:
    Используем esc_js() для безопасного вывода заголовка работы в JavaScript.

Теперь, когда вы будете генерировать свою страницу с помощью шорткода, заголовок страницы будет изменен на нужный вам, отображая актуальный заголовок работы.

Оцените материал
Добавить комментарий

Капча загружается...