Цей код призначений для видалення базового слугу таксономії (наприклад, /tag/ для тегів) з URL-адрес вашого сайту на WordPress. Це дозволяє зробити URL-адреси більш короткими та зручними для користувачів і пошукових систем.

Ось як працює цей код:

Фільтр request: Ця частина коду модифікує запити WordPress, щоб правильно обробляти URL-адреси без базового слугу таксономії. Вона перевіряє наявність параметрів attachment або name у запиті та відповідно налаштовує запит для отримання правильних термінів таксономії.

Це дозволяє WordPress розпізнавати URL-адреси без базового слугу та відображати відповідні сторінки.

Фільтр term_link: Цей фільтр змінює генерацію посилань для термінів таксономії, видаляючи базовий слуг з URL-адрес. Коли WordPress створює посилання на сторінку терміна (наприклад, на сторінку тегу), цей код видаляє частину URL, що відповідає базовому слугу таксономії.

Це забезпечує генерацію "чистих" URL-адрес без зайвих частин.

Редирект старих URL: Ця функція відповідає за перенаправлення старих URL-адрес з базовим слугом на нові URL без нього. Якщо користувач або пошукова система звертається до старого URL з базовим слугом, цей код автоматично перенаправляє на новий, коректний URL без базового слугу.

Це важливо для збереження SEO-рейтингу та забезпечення безперебійного доступу до контенту після зміни структури URL.

Застереження: Використання цього коду може призвести до конфліктів, якщо у вас є терміни таксономії та сторінки або записи з однаковими слагами. У таких випадках WordPress може не правильно визначати, який контент відображати. Тому перед впровадженням цього коду рекомендується ретельно протестувати його на вашому сайті.

Альтернативні рішення: Якщо ви не хочете вносити зміни безпосередньо в код, існують плагіни, які спрощують цей процес:

Remove Taxonomy Base Slug: Цей плагін дозволяє видалити базовий слуг таксономії з URL-адрес без необхідності втручатися в код. Він автоматично обробляє перенаправлення та забезпечує коректну роботу посилань. 
WORDPRESS.COM

Remove Taxonomy Url: Ще один плагін, який допомагає видалити базовий слуг таксономії з URL-адрес, роблячи їх більш чистими та зрозумілими. 
UK.WORDPRESS.ORG

Використання плагінів може бути простішим та безпечнішим способом досягнення бажаного результату без прямого редагування коду вашої теми.

=========================================================================

add_filter('request', 'rudr_change_term_request', 1, 1 );

function rudr_change_term_request($query){
    
    $tax_name = 'post_tag'; // specify your taxonomy name here

    // Перевіряємо, чи існує ключ 'attachment' у масиві $query
    if (!empty($query['attachment'])) {
        $include_children = true;
        $name = $query['attachment'];
    } elseif (!empty($query['name'])) { // Перевіряємо, чи існує ключ 'name'
        $include_children = false;
        $name = $query['name'];
    } else {
        return $query; // Якщо обидва ключі відсутні, повертаємо оригінальний запит
    }

    $term = get_term_by('slug', $name, $tax_name); // Отримуємо термін

    if ($term && !is_wp_error($term)) { // Перевіряємо, чи термін існує
        if ($include_children) {
            unset($query['attachment']);
            $parent = $term->parent;
            while ($parent) {
                $parent_term = get_term($parent, $tax_name);
                $name = $parent_term->slug . '/' . $name;
                $parent = $parent_term->parent;
            }
        } else {
            unset($query['name']);
        }

        switch ($tax_name) {
            case 'category':
                $query['category_name'] = $name; // Для категорій
                break;
            case 'post_tag':
                $query['tag'] = $name; // Для тегів
                break;
            default:
                $query[$tax_name] = $name; // Для інших таксономій
                break;
        }
    }

    return $query;
}


add_filter( 'term_link', 'rudr_term_permalink', 10, 3 );

function rudr_term_permalink( $url, $term, $taxonomy ){
$taxonomy_name = 'post_tag'; // your taxonomy name here
$taxonomy_slug = 'tag'; // the taxonomy slug can be different with the taxonomy name (like 'post_tag' and 'tag' )

// exit the function if taxonomy slug is not in URL
if ( strpos($url, $taxonomy_slug) === FALSE || $taxonomy != $taxonomy_name ) return $url;
$url = str_replace('/' . $taxonomy_slug, '', $url);
return $url;
}

add_action('template_redirect', 'rudr_old_term_redirect');

function rudr_old_term_redirect() {
$taxonomy_name = 'post_tag';
$taxonomy_slug = 'tag';
// exit the redirect function if taxonomy slug is not in URL
if( strpos( $_SERVER['REQUEST_URI'], $taxonomy_slug ) === FALSE)
return;

if( ( is_category() && $taxonomy_name=='category' ) || ( is_tag() && $taxonomy_name=='post_tag' ) || is_tax( $taxonomy_name ) ) :

        wp_redirect( site_url( str_replace($taxonomy_slug, '', $_SERVER['REQUEST_URI']) ), 301 );
exit();
endif;

}