Удаление префикса типа записи из URL на WordPress: руководство

Удаление имени типа записи (префикса) из URL

В этой статье мы рассмотрим, как убрать префикс типа записи из URL на WordPress, чтобы ваши ссылки выглядели более чистыми и понятными.

Вариант 1

Допустим, у нас есть новый тип записи с названием team, и его URL выглядит так:

example.com/team/dream-team

Мы хотим убрать префикс team, чтобы ссылки выглядели так:

example.com/dream-team

Шаги для реализации

Для этого нам нужно использовать фильтры и действия WordPress:

add_filter( 'post_type_link', 'remove_post_type_slug', 10, 2 );
add_action( 'pre_get_posts', 'add_post_type_to_get_posts_request' );

// Функция для удаления префикса имени типа записи из URL
function remove_post_type_slug( $post_link, $post ) {
    if( $post->post_type === 'team' ) {
        return str_replace( "/$post->post_type/", '/', $post_link );
    }
    return $post_link;
}

// Добавление типа записи в запрос
function add_post_type_to_get_posts_request( $query ) {
    if( is_admin() || ! $query->is_main_query() ) {
        return; // не основной запрос
    }

    // Проверяем, не является ли это запросом со статической страницей
    if( 
        ! isset( $query->query['page'] ) || 
        empty( $query->query['name'] ) || 
        count( $query->query ) != 2 
    ) {
        return;
    }

    $query->set( 'post_type', [ 'post', 'page', 'team' ] ); // Добавляем 'team'
}

Важно

Учтите, что новый URL в формате example.com/dream-team имеет такую же структуру, как URL статических страниц. Если имя статической страницы совпадет с названием нового типа записи, может возникнуть конфликт, и будет отображаться неправильный пост. Однако такая ситуация маловероятна, поэтому мы просто должны помнить о потенциальной проблеме.

Вариант 2

В этом варианте мы рассматриваем тип записи pool_services. Здесь мы используем функцию add_permastruct(), которая позволяет удалить имя типа записи из URL не только на сайте, но и в админке.

В результате мы получим URL в формате:

example.com/postname

вместо:

example.com/pool-services/postname

Шаги для реализации

add_action( 'init', 'pw24_post_type_rewrite' );
add_action( 'pre_get_posts', 'pw24_add_post_type_to_get_posts_request' );

// Функция для переписывания URL
function pw24_post_type_rewrite() {
    global $wp_rewrite;

    // Тип записи - pool_services
    $wp_rewrite->add_rewrite_tag( "%pool_services%", '([^/]+)', "pool_services=" );
    $wp_rewrite->add_permastruct( 'pool_services', '%pool_services%' );
}

// Добавление типа записи в запрос
function pw24_add_post_type_to_get_posts_request( $query ) {
    if( is_admin() || ! $query->is_main_query() ) {
        return; // не основной запрос
    }

    // Проверяем, не является ли это запросом со статической страницей
    if( 
        ! isset( $query->query['page'] ) || 
        empty( $query->query['name'] ) || 
        count( $query->query ) != 2 
    ) {
        return;
    }

    // Добавляем 'pool_services'
    $query->set( 'post_type', [ 'post', 'page', 'pool_services' ] );
}

Теперь в ссылках (как на сайте, так и в админке) отсутствует имя типа записи pool-services, и все страницы работают, как нужно.


Таким образом, вы сможете управлять URL-адресами ваших записей в WordPress, делая их более удобными для пользователей и поисковых систем.

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *