> For the complete documentation index, see [llms.txt](https://developers.weglot.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://developers.weglot.com/wordpress/use-cases/translate-link.md).

# Translate link

By default, Weglot translates links based on a set of built-in patterns. In the example below, we want to translate the URL held in a `data-link2` attribute. We use the `weglot_get_replace_modify_link` filter to register a new pattern, then provide the function that rewrites it.

```php
add_filter( 'weglot_get_replace_modify_link', 'custom_weglot_get_replace_modify_link' );
function custom_weglot_get_replace_modify_link( $data ) {
	$data['datalink2'] = '/<([^\>]+?)?data-link2=(\"|\')([^\s\>]+?)(\"|\')([^\>]+?)?>/';
	return $data;
}

function replace_datalink2( $translated_page, $current_url, $quote1, $quote2, $sometags = null, $sometags2 = null ) {
	$request_url_services = weglot_get_service( 'Request_Url_Service_Weglot' );
	$replace_url_Service = weglot_get_service( 'Replace_Link_Service_Weglot' );
	$current_language = $request_url_services->get_current_language();
	$translated_page  = preg_replace( '/<' . preg_quote( $sometags, '/' ) . 'data-link2=' . preg_quote( $quote1 . $current_url . $quote2, '/' ) . '/', '<' . $sometags . 'data-link2=' . $quote1 . $replace_url_Service->replace_url( $current_url, $current_language ) . $quote2, $translated_page );
	return $translated_page;
}
```

{% hint style="info" %}
**How the pattern maps to a function.** Each key you add to the `$data` array (here `datalink2`) is resolved to a global function named `replace_<key>` (here `replace_datalink2`). Weglot calls it for every match with these arguments, in order: `$translated_page`, `$current_url`, `$quote1`, `$quote2`, `$sometags`, `$sometags2`. Your function must return the (possibly modified) page. You can change the resolved function name with the `weglot_modify_link_replace_function` filter.
{% endhint %}
