Replace a word in a custom block or paragraph with a token related to a content type field value
First create your own module.
In mymodule_tokens.module insert below:
&lt;?php

use Drupal\Core\Render\BubbleableMetadata;

/**
 * Implements hook_token_info().
 */

function mymodule_tokens_token_info(): array
{
    $type = array(
        'name' =&gt; t('My Module Tokens'),
        'description' =&gt; t('Custom tokens to solve use-case problems for the website.'),
    );
    $node['brand'] = array(
        'name' =&gt; t(&quot;Brand name from node&quot;),
        'description' =&gt; t(&quot;Brand name to replace in text, custom blocks, paragraphs, ...&quot;),
    );
    return array(
        'types' =&gt; array(
            'mymodule_tokens' =&gt; $type,
        ),
        'tokens' =&gt; array(
            'mymodule_tokens' =&gt; $node,
        ),
    );
}

/**
 * Implements hook_tokens().
 */

function mymodule_tokens_tokens($type, $tokens, array $data, array $options, BubbleableMetadata $bubbleable_metadata): array
{
    $replacements = [];

    if ($type == 'mymodule_tokens') {
        foreach ($tokens as $name =&gt; $original) {
            switch ($name) {
                case 'brand':
                    $node = \Drupal::routeMatch()-&gt;getParameter('node');
                    if ($node instanceof \Drupal\node\NodeInterface) {
                        if ($node-&gt;hasField('field_brand') &amp;&amp; !$node-&gt;get('field_brand')-&gt;isEmpty()) {
                            $brand_name = $node-&gt;field_brand-&gt;value;
                            $replacements[$original] = $brand_name;
                        } else {
                            $replacements[$original] = null;
                        }
                    }
                    break;
                default:
                    break;
            }
        }
    }

    return $replacements;
}