URL-префикс для постов WordPress - PullRequest
4 голосов
/ 02 сентября 2011

Итак, у меня есть сайт на движке WordPress.И я хочу, чтобы URL-адреса сообщений выглядели как http://website.com/blog/post-name/ или http://website.com/blog/categ-name/post-name/. Но все остальное будет выглядеть как http://website.com/page-name/. Просто хочу добавить префикс «блог» к URL-адресам для всех сообщений, но не для страниц.,Мои постоянные настройки: /% postname% /.Если я добавлю / blog /% postname% /, у меня будет префикс 'blog' в каждом URL моего сайта :( Я не могу найти решение в админке WordPress и не нашел подходящего плагина для этого. Любая помощьценится, спасибо.

Ответы [ 4 ]

5 голосов
/ 13 октября 2016

1) Добавьте это переписывание в конце своей строки function.php

function add_rewrite_rules( $wp_rewrite )
{
    $new_rules = array(
        'blog/(.+?)/?$' => 'index.php?post_type=post&name='. $wp_rewrite->preg_index(1),
    );

    $wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
}
add_action('generate_rewrite_rules', 'add_rewrite_rules'); 

function change_blog_links($post_link, $id=0){

    $post = get_post($id);

    if( is_object($post) && $post->post_type == 'post'){
        return home_url('/blog/'. $post->post_name.'/');
    }

    return $post_link;
}
add_filter('post_link', 'change_blog_links', 1, 3);

2) Перейдите в Настройки> Постоянные ссылки и нажмите Save Changes.

5 голосов
/ 03 сентября 2011

Почему бы не создать категорию под названием "блог" и использовать структуру постоянных ссылок /% category% /% postname% /?

2 голосов
/ 11 июля 2015

Я сделал это: http://www.designnode.co.uk/blog/prefix-wordpress-post-url-slug/

add_action( 'init', 'redefine_post', 1 );
function redefine_post() {
    register_post_type( 'post', array(
        'labels' => array(
            'name_admin_bar' => _x( 'Post', 'add new on admin bar' ),
        ),
        'public'  => true,
        '_builtin' => false,
        '_edit_link' => 'post.php?post=%d',
        'capability_type' => 'post',
        'map_meta_cap' => true,
        'hierarchical' => false,
        'rewrite' => array( 'slug' => 'blog' ),
        'query_var' => false,
        'has_archive' => true,
        'supports' => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'trackbacks', 'custom-fields', 'comments', 'revisions', 'post-formats' ),
    ) );
}

Это включает в себя создание пользовательского типа сообщения (что немного раздражает), но оно переопределяет и работает с сообщением.

Я бы хотел, чтобыбыл лучший способ сделать это!(В противном случае вы получите / blog / перед всем, если просто измените постоянные ссылки).

0 голосов
/ 01 июля 2019

Перейдите в Настройки> Постоянные ссылки, выберите «Пользовательская структура» и перепишите это поле в «/ blog /% postname% /».Ваше сообщение получит / blog / prefix, а ваши страницы - нет.Я проверял это на Wordpress 5.2.2

...