¿Eliminar la categoría y la base de etiquetas de las URL de WordPress sin un complemento?

8 minutos de lectura

avatar de usuario de cosmoonot
cosmonoto

Me gustaría eliminar la categoría y la base de etiquetas de la URL de WordPress. Me he encontrado con otras publicaciones y soluciones que usaban complementos. Me gustaría mantenerme alejado de los complementos y tener una solución dentro de functions.php. Esto evitaría que se cambien futuras actualizaciones de complementos o archivos predeterminados de WordPress.

Cualquier ayuda sería apreciada. ¡Gracias!

He probado estas soluciones hasta ahora:

  • ¿Finalmente encontraste una buena solución para eliminar la base de etiquetas de la URL?

    – JonSnow

    8 de abril de 2021 a las 14:28

avatar de usuario de optimiertes
optimizarte

Si desea eliminar /category/ desde la url, sigue estos dos pasos:

  1. Vaya a Configuración >> Enlaces permanentes y seleccione Personalizado e ingrese: /%category%/%postname%/
  2. A continuación, establezca su base de categoría en .

Guárdalo y verás que tu URL cambió a este formato:
http://tublog.com/citas/

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

  • La última versión de WP (v.4, al menos en mi caso)no parece permitir / que se establecerá para la base de categoría. Sugiera usar la respuesta de @ Robbert en su lugar.

    – Giraldi

    11 de enero de 2015 a las 2:56

  • La paginación se interrumpe cuando se usa una página para enumerar las publicaciones etiquetadas como una categoría dada cuando se usa esta solución (WP 4.4.2, usando . como base de categoría)

    – servilletas con mantequilla

    27 de febrero de 2016 a las 22:14

  • Puedo confirmar que esto se rompe en 4.6.1 cuando se trata de paginación.

    – El desarrollador desconocido

    28/10/2016 a las 13:20

  • para quitar el /./ de enlaces, usa este filtro:add_filter( 'term_link', function($termlink){ return str_replace('/./', '/', $termlink); }, 10, 1 );

    – jave.web

    11 de marzo de 2017 a las 0:28

  • Esto rompe la paginación. Recibe el error 404 cuando intenta navegar a /página/2

    – Emeka Mba

    11 de agosto de 2017 a las 11:10

avatar de usuario de paulalexandru
paulalexandru

Si utiliza Yoast SEO complemento simplemente vaya a:

Search Appearance > Taxonomies > Category URLs.

y seleccione remove de Strip the category base (usually /category/) from the category URL.

Con respecto a la eliminación de etiquetas, aún no encontré ninguna solución.

  • A partir del 13 de abril de 2017, el método de “punto” para hacer esto rompe muchas funciones de WordPress 4.6 y versiones posteriores. En otras palabras, ya no es una solución viable. Sin embargo, Yoast logra esto sin esfuerzo. Instale el complemento, habilite la función y funcionará perfectamente. Además, obtienes un excelente complemento para administrar gran parte de tu sitio. Ganar Ganar!

    – usuario658182

    13 de abril de 2017 a las 18:08

  • También podría agregar que las ‘Páginas de configuración avanzada’ deben habilitarse en la pestaña ‘Características’ del complemento en su versión actual.

    – Mate

    1 jun 2017 a las 14:05

  • Pero la pregunta es ¿cómo hacerlo sin complemento?

    – Daniel

    20 de enero de 2018 a las 7:31

  • que pasa con la etiqueta??

    – Kamran Asgari

    19 de diciembre de 2018 a las 5:36

  • En versiones recientes (versión 9 probada), esta opción ahora está oculta bajo Search Appearance > Taxonomies > Category URLs.

    – Leymannx

    2 de abril de 2019 a las 11:06


Avatar de usuario de Anigel
Ángel

Si bien lo descarta como una solución, el complemento es, con mucho, el método más fácil y consistente y no cambia ningún archivo predeterminado de WordPress.

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

No ha sido necesario actualizarlo durante un año, por lo que no está creando exactamente ningún problema con las actualizaciones.

No existe una solución simple hecha a mano que haga todo esto que no solo replique lo que hace el complemento desde sus propias funciones.php

  • Enlaces permanentes mejores y lógicos como myblog.com/my-category/ y myblog.com/my-category/my-post/.
  • Complemento simple: apenas agrega gastos generales.
  • Funciona fuera de la caja, no necesita configuración. No es necesario modificar los archivos de WordPress.
  • No requiere otros complementos para funcionar.
  • Compatible con los complementos del mapa del sitio.
  • Funciona con múltiples subcategorías.
  • Funciona con WordPress multisitio.
  • Redirige los enlaces permanentes de la categoría anterior a los nuevos (redireccionamiento 301, bueno para SEO).

Además, obtiene el beneficio de que si WordPress cambia, el complemento se actualizará para que funcione, mientras que luego tendrá que descubrir cómo arreglar su propio código por su cuenta.

  • El complemento funciona bien. Todavía estoy interesado en ver soluciones alternativas.

    – cosmoonot

    23 de julio de 2013 a las 17:58

  • Aquí hay una alternativa más actualizada: Eliminar URL de categoría

    – Giraldi

    13 de enero de 2015 a las 12:15

  • Demasiados complementos en un sitio causan problemas y dificultan el uso del control de versiones (como git) con un tema de WordPress. Así que esto idealmente se haría sin

    – timhc22

    29 de abril de 2015 a las 14:18

  • Op pidió una respuesta “sin un complemento”

    – Alejandro Holsgrove

    28 de diciembre de 2016 a las 16:36

  • el complemento ya no existe

    – Stender

    13 de febrero de 2018 a las 13:09

  1. Establecer estructura personalizada: /%postname%/
  2. Establecer categoría base: . (no punto /)

  3. Ahorrar. Funciona 100% correctamente.

en su lugar, pon esto en tus funciones. php funciona bien, no hay problemas de redirección.

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/", "https://stackoverflow.com/", $string );
        return trailingslashit( $aa_g );
    }
    if ( $type == 'category' )
        return trailingslashit( $string );
}
return $string;
}

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

  • Gran solución sin complemento! ¡Justo lo que necesitaba!

    – Giraldi

    11 de enero de 2015 a las 2:57


  • Sin embargo, lo anterior no parece funcionar para subcategoríasaunque… ej. www.site.com/main-category/sub-category/. Devolvió una página de error 404

    – Giraldi

    13 de enero de 2015 a las 12:25

  • @Robbert ¿Por qué se necesita esta verificación?: if ( $wp_rewrite->use_trailing_slashes == false )........

    – T.Todua

    21 de abril de 2015 a las 15:19


  • No hace nada por mí.

    – BadHorsie

    18 de agosto de 2017 a las 15:37

Avatar de usuario de DaFois
dafois

Es probable que el truco de los puntos arruine tus feeds rss y/o paginación. Sin embargo, estos funcionan:

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, "https://stackoverflow.com/", 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, "https://stackoverflow.com/");
    $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, "https://stackoverflow.com/", 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, "https://stackoverflow.com/");
    $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;
}

  • Gran solución sin complemento! ¡Justo lo que necesitaba!

    – Giraldi

    11 de enero de 2015 a las 2:57


  • Sin embargo, lo anterior no parece funcionar para subcategoríasaunque… ej. www.site.com/main-category/sub-category/. Devolvió una página de error 404

    – Giraldi

    13 de enero de 2015 a las 12:25

  • @Robbert ¿Por qué se necesita esta verificación?: if ( $wp_rewrite->use_trailing_slashes == false )........

    – T. Todua

    21 de abril de 2015 a las 15:19


  • No hace nada por mí.

    – BadHorsie

    18 de agosto de 2017 a las 15:37

avatar de usuario de kiheru
kiheru

El complemento sin categoría no funcionó para mí.

Para Multisite WordPress funciona lo siguiente:

  1. Vaya a los sitios de administración de red;
  2. Abrir sitio bajo \;
  3. Ir a la configuración;
  4. Bajo el tipo de estructura de enlaces permanentes /%category%/%postname%/. Esto mostrará su URL como www.domainname.com/categoryname/postname;
  5. Ahora vaya al panel de control de su sitio (no al panel de red);
  6. Configuración abierta;
  7. Abrir enlace permanente. No guardar (el enlace permanente mostrará un campo no editable como yourdoamainname/blog/. Ignoralo. Si guarda ahora, se sobrescribirá el trabajo que hizo en el paso 4. Este paso de abrir la página de enlace permanente pero no guardar es necesario para actualizar la base de datos.

¿Ha sido útil esta solución?