Вопрос или проблема
Я бил головой о стену, пытаясь разобраться со схемой, поэтому, если кто-то может мне помочь, я буду очень признателен.
Я пытаюсь вручную добавить свою схему через пользовательские поля, а затем вызвать схему с помощью функции в файле functions.php моей дочерней темы.
Итак,
Когда я ввожу этот код
<?php
$schema = get_post_meta(get_the_ID(), 'schema', true);
if(!empty($schema)) {
echo $schema;
}
?>
в файл functions.php, я получаю эту ошибку.
Изменения вашего PHP кода были отменены из-за ошибки на строке 27 файла wp-content/themes/astra-child/functions.php. Пожалуйста, исправьте и попробуйте сохранить снова.
синтаксическая ошибка, неожиданный '<', ожидая конец файла
Затем я понял, что код должен находиться в файле header.php, но у меня нет файла header.php в дочерней теме, и копировать его содержимое в новый файл header.php в дочерней теме может быть неидеальным, так как при обновлении создателя темы я не получу преимущества от его обновленного кода.
Как мне решить эту проблему? Все, что я хочу сделать, это вызвать свою схему через пользовательские поля.
Также, является ли проблемой то, что у меня разные схемы на каждой странице, но каждое пользовательское поле называется ‘schema’?
В любом случае, я надеюсь, что это не слишком большая просьба. Я буду благодарен за любую помощь, которую вы можете предложить.
Более чистый способ добавления пользовательских данных в <head> вашего сайта – это использование пользовательской функции, которую вы подключаете к соответствующему действию. В этом случае вы можете, например, использовать действие wp_head
. Вот так,
// это идет в файл functions.php
add_action('wp_head', 'insert_my_page_schema');
function insert_my_page_schema() {
// выполняем код только на отдельной странице
if ( ! is_page() ) { // измените условие по мере необходимости
return;
}
// есть ли у нас сохраненная схема метаданных
$schema = get_post_meta( get_the_ID(), 'schema', true);
if ( ! $schema ) {
return;
}
// добавляем разметку схемы в заголовок страницы
echo esc_html($schema); // экранируем вывод, чтобы предотвратить любую непреднамеренную вставку html
// или при необходимости, format_my_page_schema($schema);
}
// необязательная вспомогательная функция для форматирования вывода схемы
function format_my_page_schema($schema) {
// форматируем схему, если необходимо
return $schema;
}
Также, является ли проблемой то, что у меня разные схемы на каждой странице, но каждое пользовательское поле называется ‘schema’?
Каждая страница может иметь свои собственные метаданные схемы, сохраненные с мета-ключом schema
. Проблема возникает, если у вас есть несколько пользовательских полей для страницы, каждое из которых имеет один и тот же мета-ключ, т.е. каждый ввод схемы имеет name="schema"
. Но если имена полей в массивном формате, name="schema[]"
, и вы сохраняете данные в виде массива, тогда не должно быть проблем. Если данные сохранены в виде массива, то вам нужно изменить функцию вывода, чтобы правильно обрабатывать массив.
Ответ или решение
Ваша проблема с внедрением схемы через код в файле functions.php
имеет несколько аспектов, и давайте подробно разберём их.
Ошибка синтаксиса
Первая проблема, с которой вы сталкиваетесь, связана с тем, что вы пытаетесь вставить HTML-код напрямую в файл functions.php
. PHP-код в этом файле не может обрабатывать HTML-теги, когда он испытывает сложность с их парсингом. В вашем случае сообщение об ошибке:
syntax error, unexpected '<', expecting end of file
указывает на то, что PHP не может корректно обработать символы, которые обычно используются в HTML. Вместо того, чтобы добавлять HTML-теги в functions.php
, вам нужно использовать правильный подход, обернув ваш код в PHP-функцию и вызывая её через подходящий хук.
Внедрение схемы в голову страницы
Рекомендуемое решение заключается в использовании хука wp_head
. Это позволяет вам безопасно добавлять схемы и их разметку в <head>
вашей страницы. Ваш код можно оформить следующим образом:
// Это нужно вставить в файл functions.php
add_action('wp_head', 'insert_my_page_schema');
function insert_my_page_schema() {
// Проверяем, находимся ли мы на странице
if (!is_page()) {
return;
}
// Получаем мета-данные схемы
$schema = get_post_meta(get_the_ID(), 'schema', true);
if (empty($schema)) {
return;
}
// Добавляем схему в <head>
echo esc_html($schema); // Экранируем вывод для предотвращения XSS-атак
}
Проблема с именем полей
Отвечая на ваш вопрос о том, будет ли проблемой использование одинакового имени 'schema'
для разных страниц, важно отметить, что это не создаст проблем, если вы правильно сохраняете данные в базе. WordPress позволяет каждому посту иметь свои уникальные мета-данные даже при одинаковых ключах.
Если же вы сохраняете значения как массив с использованием name="schema[]"
, важно будет дополнительно обрабатывать эти значения. Например, вы можете использовать get_post_meta()
для извлечения всех значений массива и объединения их перед выводом, если это необходимо.
Устранение проблем с отсутствующей header.php
Если в вашем дочернем шаблоне отсутствует файл header.php
, это не является препятствием. WordPress автоматически использует файл header.php
из родительской темы, если он не задан в дочернем шаблоне. То есть, если вы добавите функцию, которая выводит вашу схему, через хук wp_head
, вы сможете добавлять свою схему без необходимости копировать файл header.php
в ваш дочерний шаблон.
Заключение
Я рекомендую вам протестировать предложенное решение с хуком wp_head
, который поможет корректно интегрировать схему на каждую страницу с уникальными данными в полях. Убедитесь, что согласно структуре ваших данных они сохраняются корректно, ещё раз проверив, как обрабатываются массивы, если вы их используете.
Если у вас возникнут дополнительные вопросы или возникнут трудности на каком-либо этапе, не стесняйтесь обращаться за помощью. Ваше стремление к улучшению сайта и изучению новых технологий уже заслуживает похвалы.