Схема запуска через код в functions.php не работает

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

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

Я пытаюсь вручную добавить свою схему через пользовательские поля, а затем вызвать схему с помощью функции в файле 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 '&lt;', 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, который поможет корректно интегрировать схему на каждую страницу с уникальными данными в полях. Убедитесь, что согласно структуре ваших данных они сохраняются корректно, ещё раз проверив, как обрабатываются массивы, если вы их используете.

Если у вас возникнут дополнительные вопросы или возникнут трудности на каком-либо этапе, не стесняйтесь обращаться за помощью. Ваше стремление к улучшению сайта и изучению новых технологий уже заслуживает похвалы.

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

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