wp_rel_callback

The timeline below displays how wordpress function wp_rel_callback has changed across different WordPress versions. If a version is not listed, refer to the next available version below.

WordPress Version: 6.2

/**
 * Callback to add a rel attribute to HTML A element.
 *
 * Will remove already existing string before adding to prevent invalidating (X)HTML.
 *
 * @since 5.3.0
 *
 * @param array  $matches Single match.
 * @param string $rel     The rel attribute to add.
 * @return string HTML A element with the added rel attribute.
 */
function wp_rel_callback($matches, $rel)
{
    $text = $matches[1];
    $atts = wp_kses_hair($matches[1], wp_allowed_protocols());
    if (!empty($atts['href']) && wp_is_internal_link($atts['href']['value'])) {
        $rel = trim(str_replace('nofollow', '', $rel));
    }
    if (!empty($atts['rel'])) {
        $parts = array_map('trim', explode(' ', $atts['rel']['value']));
        $rel_array = array_map('trim', explode(' ', $rel));
        $parts = array_unique(array_merge($parts, $rel_array));
        $rel = implode(' ', $parts);
        unset($atts['rel']);
        $html = '';
        foreach ($atts as $name => $value) {
            if (isset($value['vless']) && 'y' === $value['vless']) {
                $html .= $name . ' ';
            } else {
                $html .= "{$name}=\"" . esc_attr($value['value']) . '" ';
            }
        }
        $text = trim($html);
    }
    $rel_attr = $rel ? ' rel="' . esc_attr($rel) . '"' : '';
    return "<a {$text}{$rel_attr}>";
}

WordPress Version: 5.3

/**
 * Callback to add a rel attribute to HTML A element.
 *
 * Will remove already existing string before adding to prevent invalidating (X)HTML.
 *
 * @since 5.3.0
 *
 * @param array  $matches Single match.
 * @param string $rel     The rel attribute to add.
 * @return string HTML A element with the added rel attribute.
 */
function wp_rel_callback($matches, $rel)
{
    $text = $matches[1];
    $atts = wp_kses_hair($matches[1], wp_allowed_protocols());
    if (!empty($atts['href'])) {
        if (in_array(strtolower(wp_parse_url($atts['href']['value'], PHP_URL_SCHEME)), array('http', 'https'), true)) {
            if (strtolower(wp_parse_url($atts['href']['value'], PHP_URL_HOST)) === strtolower(wp_parse_url(home_url(), PHP_URL_HOST))) {
                return "<a {$text}>";
            }
        }
    }
    if (!empty($atts['rel'])) {
        $parts = array_map('trim', explode(' ', $atts['rel']['value']));
        $rel_array = array_map('trim', explode(' ', $rel));
        $parts = array_unique(array_merge($parts, $rel_array));
        $rel = implode(' ', $parts);
        unset($atts['rel']);
        $html = '';
        foreach ($atts as $name => $value) {
            if (isset($value['vless']) && 'y' === $value['vless']) {
                $html .= $name . ' ';
            } else {
                $html .= "{$name}=\"" . esc_attr($value['value']) . '" ';
            }
        }
        $text = trim($html);
    }
    return "<a {$text} rel=\"" . esc_attr($rel) . '">';
}