Не переводите определенные элементы с помощью плагина DeepL и DeepL WordPress

#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 , вероятно, также должно работать.