Как я могу использовать идентификаторы категорий в постоянных ссылках WordPress? - PullRequest
2 голосов
/ 28 мая 2011

Я хочу использовать что-то вроде:

http://example.com/%category_id%/%postname%/

для структуры постоянной ссылки.Например, если у поста есть категория с идентификатором 3, то URL для поста будет

http://example.com/3/post-name/

Кто-нибудь знает, как это можно сделать?Я не против модифицировать ядро ​​WordPress.

1 Ответ

1 голос
/ 30 мая 2011

Этот код добавляет тег перезаписи %category_id% и фильтрует постоянные ссылки после публикации, заменяя их фактическим идентификатором категории (наименьшим, если имеется несколько категорий). Вы можете поместить это в плагин или в свой файл темы.

add_action( 'init', 'so6159452_init' );
function so6159452_init()
{
    add_rewrite_tag( '%category_id%', '([0-9]+)' );
}

add_filter( 'post_link', 'so6159452_post_link', 10, 2 );
function so6159452_post_link( $permalink, $post )
{
    if ( false !== strpos( $permalink, '%category_id%' ) ) {
        $cats = get_the_category( $post->ID );
        if ( $cats ) {
            usort( $cats, '_usort_terms_by_ID' ); // order by ID
            $category_id = $cats[0]->cat_ID;
        } else {
            // Error: no category assigned to this post
            // Just use a dummy variable
            $category_id = '0';
        }
        $permalink = str_replace( '%category_id%', $category_id, $permalink );
    }
    return $permalink;
}
...