При создании нового типа постов функцией register_post_type() за формирование url в основном отвечает аргумент rewrite. Например, при регистрации типа записи project, по умолчанию в этом параметре отображается название типа записи:

http://site.loc/project/project-example/

В параметре rewrite можно указывать плейсхолдеры типа %category%. Но их нужно создать с помощью add_rewrite_tag() и научить WP их понимать.

Чтобы вместо project-example, в url отображался текущий id записи, добавим:

'rewrite' => array( 'slug' => 'projects' )

И допишем необходимые правила реврайтов в functions.php

// Rewrite permalink structure
function projects_rewrite() {
    global $wp_rewrite;
    $queryarg = 'post_type=project&p=';
    $wp_rewrite->add_rewrite_tag( '%cpt_id%', '([^/]+)', $queryarg );
    $wp_rewrite->add_permastruct( 'projects', '/projects/%cpt_id%/', false );
}
add_action( 'init', 'projects_rewrite' );

function projects_permalink( $post_link, $id = 0, $leavename ) {
    global $wp_rewrite;
    $post = get_post( $id );
    if ( is_wp_error( $post ) )
        return $post;
        $newlink = $wp_rewrite->get_extra_permastruct( 'projects' );
        $newlink = str_replace( '%cpt_id%', $post->ID, $newlink );
        $newlink = home_url( user_trailingslashit( $newlink ) );
    return $newlink;
}
add_filter('post_type_link', 'projects_permalink', 1, 3);

Не забудьте пересохранить пермалинки в разделе Настройки -> Постоянные ссылки.

Теперь ссылка на проект будет выглядеть так:

http://site.loc/project/10/

За решение спасибо: stackoverflow.com/questions/25199501/wordpress-custom-type-append-post-id-at-the-end

Насколько публикация полезна?

Нажмите на звезду, чтобы оценить!

Средняя оценка 5 / 5. Количество оценок: 1

Оценок пока нет. Поставьте оценку первым.

Добавить комментарий

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