it-swarm-pt.tech

Remover categoria e tag base do URL do WordPress - sem um plug-in

Gostaria de remover a categoria e tag base do URL do wordpress. Eu me deparei com outros posts e soluções que usavam plugins. Eu gostaria de ficar longe de plugins e ter uma solução dentro de functions.php. Isso impediria que futuras atualizações de plug-ins ou arquivos padrão wordpress fossem alterados. 

Qualquer ajuda seria apreciada. Obrigado!

Eu tentei estas soluções até agora:

38
cosmoonot

Eu gostei desta solução:

Se você deseja remover /category/ da URL, siga estas duas etapas:

  1. Vá para Configurações >> Permalinks e selecione Personalizar e insira: /%category%/%postname%/
  2. Em seguida, defina sua base de categorias como .

Guarde-o e verá o seu URL alterado para este formato: Http: /yourblog.com/quotes/

(Fonte: http://premium.wpmudev.org/blog/daily-tip-quick-trick-to-remove-category-from-wordpress-url/

47
optimiertes
  1. Definir estrutura personalizada: /% postname% /
  2. Definir base da categoria:. (ponto não /)

  3. Salve . 100% funcionam corretamente.

17
user4414801

Embora você descarte isso como uma solução, o plug-in é de longe o método mais fácil e consistente e eles não alteram nenhum arquivo padrão wordpress. 

http://wordpress.org/plugins/wp-no-category-base/

Não precisa ser atualizado por um ano, por isso não é exatamente criar problemas com atualizações.

Não há uma solução simples de rolagem manual que faça tudo isso, que não apenas replique o que o plug-in faz dentro de suas próprias funções.php

  • Permalinks melhores e lógicos, como myblog.com/my-category/ e myblog.com/my-category/my-post/. 
  • Plugin simples - apenas adiciona qualquer sobrecarga. 
  • Funciona imediatamente - sem necessidade de configuração. Não há necessidade de modificar Arquivos wordpress. 
  • Não requer outros plugins para funcionar. 
  • Compatível com plugins do sitemap. 
  • Trabalha com várias subcategorias. 
  • Funciona com o WordPress Multisite. 
  • Redireciona permalinks de categorias antigas para os novos (301 redirecionados, bons para SEO).

Além disso, você obtém o benefício de que, se o wordpress for alterado, o plug-in será atualizado para funcionar, enquanto você terá que descobrir como corrigir seu próprio código sozinho.

15
Anigel

Se você usa o plugin Yoast SEO basta ir para:

Advanced > Permalinks > Change URLs

E selecione remove from Strip the category base (usually /category/) from the category URL.

Em relação à remoção da tag, ainda não encontrei nenhuma solução.

10
paulalexandru

em vez disso, coloque isso em suas funções.php funciona bem, sem problemas de redirecionamento.

function fix_slash( $string, $type )
{
global $wp_rewrite;
if ( $wp_rewrite->use_trailing_slashes == false )
{
    if ( $type != 'single' && $type != 'category' )
        return trailingslashit( $string );

    if ( $type == 'single' && ( strpos( $string, '.html/' ) !== false ) )
        return trailingslashit( $string );

    if ( $type == 'category' && ( strpos( $string, 'category' ) !== false ) )
    {
        $aa_g = str_replace( "/category/", "/", $string );
        return trailingslashit( $aa_g );
    }
    if ( $type == 'category' )
        return trailingslashit( $string );
}
return $string;
}

add_filter( 'user_trailingslashit', 'fix_slash', 55, 2 );
4
Robbert

O truque de pontos provavelmente arruinará seus feeds RSS e/ou paginação. Esses trabalhos, no entanto:

add_filter('category_rewrite_rules', 'no_category_base_rewrite_rules');
function no_category_base_rewrite_rules($category_rewrite) {
    $category_rewrite=array();
    $categories=get_categories(array('hide_empty'=>false));
    foreach($categories as $category) {
        $category_nicename = $category->slug;
        if ( $category->parent == $category->cat_ID )
            $category->parent = 0;
        elseif ($category->parent != 0 )
            $category_nicename = get_category_parents( $category->parent, false, '/', true ) . $category_nicename;
        $category_rewrite['('.$category_nicename.')/(?:feed/)?(feed|rdf|rss|rss2|atom)/?$'] = 'index.php?category_name=$matches[1]&feed=$matches[2]';
        $category_rewrite['('.$category_nicename.')/page/?([0-9]{1,})/?$'] = 'index.php?category_name=$matches[1]&paged=$matches[2]';
        $category_rewrite['('.$category_nicename.')/?$'] = 'index.php?category_name=$matches[1]';
    }
    global $wp_rewrite;
    $old_base = $wp_rewrite->get_category_permastruct();
    $old_base = str_replace( '%category%', '(.+)', $old_base );
    $old_base = trim($old_base, '/');
    $category_rewrite[$old_base.'$'] = 'index.php?category_redirect=$matches[1]';
    return $category_rewrite;
}

// remove tag base
add_filter('tag_rewrite_rules', 'no_tag_base_rewrite_rules');
function no_tag_base_rewrite_rules($tag_rewrite) {
    $tag_rewrite=array();
    $tags=get_tags(array('hide_empty'=>false));
    foreach($tags as $tag) {
        $tag_nicename = $tag->slug;
        if ( $tag->parent == $tag->tag_ID )
            $tag->parent = 0;
        elseif ($tag->parent != 0 )
            $tag_nicename = get_tag_parents( $tag->parent, false, '/', true ) . $tag_nicename;
        $tag_rewrite['('.$tag_nicename.')/(?:feed/)?(feed|rdf|rss|rss2|atom)/?$'] = 'index.php?tag=$matches[1]&feed=$matches[2]';
        $tag_rewrite['('.$tag_nicename.')/page/?([0-9]{1,})/?$'] = 'index.php?tag=$matches[1]&paged=$matches[2]';
        $tag_rewrite['('.$tag_nicename.')/?$'] = 'index.php?tag=$matches[1]';
    }
    global $wp_rewrite;
    $old_base = $wp_rewrite->get_tag_permastruct();
    $old_base = str_replace( '%tag%', '(.+)', $old_base );
    $old_base = trim($old_base, '/');
    $tag_rewrite[$old_base.'$'] = 'index.php?tag_redirect=$matches[1]';
    return $tag_rewrite;
}

// remove author base
add_filter('author_rewrite_rules', 'no_author_base_rewrite_rules');
function no_author_base_rewrite_rules($author_rewrite) { 
    global $wpdb;    
    $author_rewrite = array();    
    $authors = $wpdb->get_results("SELECT user_nicename AS nicename from $wpdb->users");    
    foreach($authors as $author) {
        $author_rewrite["({$author->nicename})/(?:feed/)?(feed|rdf|rss|rss2|atom)/?$"] = 'index.php?author_name=$matches[1]&feed=$matches[2]';
        $author_rewrite["({$author->nicename})/page/?([0-9]+)/?$"] = 'index.php?author_name=$matches[1]&paged=$matches[2]';
        $author_rewrite["({$author->nicename})/?$"] = 'index.php?author_name=$matches[1]';
    }      
    return $author_rewrite;}
add_filter('author_link', 'no_author_base', 1000, 2);
function no_author_base($link, $author_id) {
    $link_base = trailingslashit(get_option('home'));
    $link = preg_replace("|^{$link_base}author/|", '', $link);
    return $link_base . $link;
}
3
Lucian Davidescu

O plugin não categoria não funcionou para mim.

Para WordPress Multisite os seguintes trabalhos:

  1. Ir para sites de administração de rede;
  2. Abrir site em \;
  3. Vá para as configurações;
  4. Em tipo de estrutura permalink /%category%/%postname%/. Isso exibirá seu URL como www.domainname.com/categoryname/postname;
  5. Agora vá para o painel do seu site (não para o painel de rede);
  6. Abrir configurações;
  7. Abra o link permanente. Não salve (o permalink mostrará o campo não editável como yourdoamainname/blog/. Ignore-o. Se você salvar agora, o trabalho que você fez na etapa 4 será sobrescrito. Essa etapa de abrir a página permalink, mas não salvar, é necessária para atualizar o banco de dados.
2
Goutham

Se você ainda estiver procurando pela combinação (tags, categorias e páginas na base de URL), você pode fazer como eu fiz.

Testado usando o Wordpress 3.9.1

Se você tiver páginas, categorias ou tags com o mesmo nome, o sistema executará:

  1. tag
  2. página
  3. categoria
2
SimonSimCity
add_action( 'init', 'remove_category_perma' );
function remove_category_perma() {
    unset($GLOBALS['wp_rewrite']->extra_permastructs['category']);
}
0
fdrv

WordPress 5.0.2:

Para remover o slug de categoria das postagens existentes, faça o seguinte:

  1. Navegue até Configurações> Permalinks e altere a Estrutura Personalizada de /%category%/%postname%/ para: /%postname%/ 
  2. Manter as bases Category e Tag vazias (que é o padrão também)
  3. Salve 

Todas as postagens agora podem ser acessadas diretamente via domain.com/%postname%/ e todas as categorias podem ser acessadas via domain.com/category/xyz/. O WordPress adicionará automaticamente todos os redirecionamentos 301 para as URLs antigas. Então, se alguém acessar domain.com/%category%/%postname%/, eles serão redirecionados automaticamente para domain.com/%postname%/.

0
Nadeem Khan

https://wordpress.org/plugins/remove-category-url/ Use este plugin faz o trabalho perfeitamente de esconder a categoria base Não requer nenhuma configuração basta instalar e ativar.

0
Girish

Selecione Estrutura personalizada em permalinks e adicione /% category% /% postname%/após seu domínio. Adicionando "/" à categoria base não funciona, você tem que adicionar um período/ponto. Eu escrevi um tutorial para isso aqui: remover categoria do tutorial de URL

0
Jonny Jordan