Это форум технической поддержки WPML – плагина для многоязычной WordPress.
Доступно для чтения всем, но только клиенты, купившие WPML, могут оставлять сообщения. Сотрудники WPML отвечают на сообщения форума 6 дней в неделю, 22 часов в сутки.
Помечено: Custom Work
Эта тема содержит 1 ответ, имеет 2 голоса.
Последнее обновление: Andrey 1 год, 7 месяцев назад.
При содействии: Andrey.
Автор | Записи |
---|---|
4 июля, 2023 на 11:40 дп #13940491 | |
anastasiyaS |
Здравствуйте! Я занимаюсь разработкой нашего сайта и у меня возникла проблема. Что я делаю? Мне нужно создать запрос к API сайта с помощью WP_JSON. В этом запросе происходит операция по получению значений кастомных полей поста/страницы. У меня есть список полей (около 100), например: title, description, _edit_last и т.д. По массиву со списком названий этих полей я прохожусь с помощью цикла (foreach) и пытаюсь получить значение с помощью функции get_post_meta(). Вот кусочек кода: <?php $postId = 100; $fields = ["title", "description", "_edit_last", ...]; foreach ($fields as $field) { $value = get_post_meta($postId, $field, true); ... } Когда я отправляю запрос через Postman, то сам запрос зависает, как будто попадает в какую-то рекурсию. После профайлинга мне удалось выяснить, что функция get_post_meta() имеет хук "get_post_metadata", на который подписан код "WPML Multilingual CMS". Мне даже удалось найти проблемное место. Оно расположено в файле: plugins/sitepress-multilingual-cms/classes/custom-field-translation/class-wpml-translate-link-targets-in-custom-fields.php на строке 57. Там есть вот такой фрагмент кода: $this->wp_api->remove_filter( 'get_post_metadata', array( $this, 'maybe_translate_link_targets' ), 10 ); $metadata_raw = maybe_unserialize( $this->wp_api->get_post_meta( $object_id, $meta_key, $single ) ); $this->wp_api->add_filter( 'get_post_metadata', array( $this, 'maybe_translate_link_targets' ), 10, 4 ); В котором, если закомментировать: "$this->wp_api->add_filter( 'get_post_metadata', array( $this, 'maybe_translate_link_targets' ), 10, 4 );", то проблема пропадает. Складывается ощущение, что из-за каких-то условий этот код зацикливается, что ломает наш запрос. Дополнительно я заметил, что мой локальный сервер Apache в момент проблемы сильно нагружает процессор, иногда доходит до 100% и это происходит даже если отменить запрос к API. Помогает только перезагрузка веб-сервера. Я также записал видео, где проблема наглядно просматривается: скрытая ссылка Мы используем в данный момент WPML Multilingual CMS 4.6.3 Надеюсь на вашу помощь в этом вопросе, спасибо! |
6 июля, 2023 на 12:21 пп #13959649 | |
Andrey Supporter Языки: Английский (English ) Русский (Русский ) Часовой пояс: Europe/Kyiv (GMT+02:00) |
Спасибо за ожидание и обращение в службу поддержки WPML. Предполагаю, что в коде может быть где-то конфликт. Я не могу точно сказать по какой причине происходит данная проблема, так как это требует отладки пользовательского кода. Возможно, проблема с приоритетностью хуков. WPML предлагает хуки, которые можно использовать в Вашей теме или плагине WordPress, чтобы обеспечить правильную многоязычную поддержку: В первую очередь, Вам необходимо обновить плагин WPML до последней версии 4.6.4 и его дополнения, чтобы воспользоваться последними исправлениями и улучшениями. Это может не обязательно решить проблему, однако, чтобы решить ее лучше всего работать с последними доступными версиями плагинов. Вы можете проверить последние выпущенные версии в разделе «Моя учетная запись -> Загрузки» на этом сайте. Инструкции по обновлению можно найти здесь: http://wpml.org/faq/install-wpml/ Пожалуйста, не забудьте сделать резервную копию Вашей базы данных, прежде чем продолжить. |