Вопрос или проблема
У меня есть этот замечательный кусок кода, который выполняется в плагине и генерирует страницу с помощью шорткода.
...
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, чтобы задать заголовок на определенной странице. Вот как можно это сделать:
-
Создание специального фильтра: Вам нужно создать функцию для изменения заголовка, которая будет вызываться во время формирования страницы.
-
Использование глобальной переменной: Чтобы передать заголовок работы в функцию, вы можете использовать глобальную переменную или использовать 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');
Пояснение:
-
Глобальная переменная
$job_title
:
Мы создаем глобальную переменную$job_title
, чтобы передавать заголовок работы в функцию изменения заголовка. -
Проверка страницы:
Используемis_page('job-board')
, чтобы проверить, что мы на нужной странице (замените ‘job-board’ на слаг вашей страницы). Это необходимо для того, чтобы изменения заголовка применялись только на нужной странице. -
Функция шорткода:
В функции шорткода мы проверяем, есть ли работы, и если да, устанавливаем заголовок работы в глобальную переменную. -
Экранирование вывода:
Используемesc_js()
для безопасного вывода заголовка работы в JavaScript.
Теперь, когда вы будете генерировать свою страницу с помощью шорткода, заголовок страницы будет изменен на нужный вам, отображая актуальный заголовок работы.