#php #wordpress #deepl
Вопрос:
Я хочу перевести весь текст, за исключением тех, которые содержатся внутри определенных элементов, например:
Please open the page <x>Settings</x> to configure your system.
DeepL должен переводить все, кроме элементов внутри <x>
элемента. Я прочитал документ здесь, https://www.deepl.com/docs-api/handling-xml/ignored-tags / и пробовал искать, но, похоже, не могу найти подходящий хук для добавления этого параметра ignore_tags.
Я поиграл с $this->request['ignore_tags']
, для DeepLApiTranslate
, но я бы предпочел не редактировать плагин напрямую.
Как мне справиться с этим / любым хуком, который я должен использовать?
Ответ №1:
Плагин WordPress DeepL использует wp_remote_*
функцию для отправки запросов в свои API, чтобы вы могли подключиться к http_request_args
filter для добавления дополнительного аргумента.
Вот пример:
add_filter(
'http_request_args',
static function ( array $parse_args, string $url ): array {
$method = $parse_args['method'] ?? '';
if ( $method === 'POST' amp;amp; str_starts_with( $url, 'https://api.deepl.com/v2/translate' ) ) {
$body = (string) ( $parse_args['body'] ?? '' );
parse_str( $body, $results );
$results['ignore_tags'] = 'x';
$parse_args['body'] = http_build_query( $results );
}
return $parse_args;
},
10,
2
);
Обратите внимание, что код предполагает, что ваш сайт работает на PHP8, поскольку он использует str_starts_with
, чтобы гарантировать, что он фильтрует аргументы запроса только при отправке запроса в конечную точку DeepL API.
Комментарии:
1. А, ладно, круто. Итак
http_request_args
, фильтр. Неплохо. Спасибо!2. Я забыл добавить это к своему ответу. В идеале вам нужно будет добавить код в виде плагина или mu-плагина. Но я думаю, что добавление кода в тему
functions.php
, вероятно, также должно работать.