son remove quitar mostrar lugar las fragmento etiquetas entrada cómo cuáles cuales completa wordpress category base

remove - Elimina la categoría y la etiqueta base de la URL de WordPress sin un complemento



¿cuáles son las etiquetas en wp? (12)

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 usan complementos. Me gustaría mantenerme alejado de los complementos y tener una solución desde functions.php. Esto evitará que se modifiquen las futuras actualizaciones de complementos o los archivos predeterminados de wordpress.

Cualquier ayuda sería apreciada. ¡Gracias!

He probado estas soluciones hasta ahora:


respuesta actualizada:

otra solución:
En el archivo wp-includes / rewrite.php, verá el código:
$this->category_structure = $this->front . ''category/''; simplemente copie toda la función, ponga en su functions.php y conéctelo. simplemente cambie la línea anterior con:
$this->category_structure = $this->front . ''/'';


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

  3. Salvar. 100% funciona correctamente


Añadiendo "." o "/" no funcionará si desea una vista de blog consolidada. Además, tengo una idea clara de qué harían esas soluciones para los feeds RSS o XML. Me siento más apegado a la convención de WP. Sin embargo, se me ocurrió un enfoque más elegante.

Primero, nombro la base de la categoría url "blog"

Luego creé una categoría llamada "todo". Finalmente, pero todas mis subcategorías en "todo". Entonces obtengo una estructura de URL como esta.

/blog - 404 - recommend 301 redirect to /blog/all/ /blog/all/ - all posts combined. /blog/all/category1/ - posts filtered by category1 /blog/all/category2/ - posts filterer by category2

Puse una etiqueta personalizada en el elemento del menú llamado "Blog", pero va a blog / todo. Sería una buena idea 301 redirigir / blog a / blog / todo en el archivo .htaccess para evitar el 404 en / blog.


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

Para Multisite WordPress, los siguientes trabajos:

  1. Ir a sitios de administración de red;
  2. Abra el sitio debajo de / ;
  3. Ir a la configuración;
  4. En los enlaces permanentes, tipo de estructura /%category%/%postname%/ . Esto mostrará su url como www.domainname.com/categoryname/postname ;
  5. Ahora ve al panel de tu sitio (no al tablero de la red);
  6. Configuración abierta;
  7. Abrir enlace permanente. No guarde (el enlace permanente mostrará el campo no editable como su yourdoamainname/blog/ . Ignore. Si guarda ahora, se sobrescribirá el trabajo que realizó 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.

El truco de puntos probablemente arruine sus alimentaciones rss y / o paginación. Estos trabajos, sin embargo:

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; }



Seleccione Estructura personalizada en enlaces permanentes y agregue /% category% /% postname% / después de su dominio. Agregar "/" a la base de categoría no funciona, debe agregar un punto / punto. Escribí un tutorial para esto aquí: eliminar la categoría del tutorial de URL


Si bien lo descarta como una solución, el complemento es, de lejos, el método más sencillo y consistente, y no cambia ningún archivo predeterminado de wordpress.

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

No ha necesitado actualizarse durante un año, por lo que no está creando ningún problema con las actualizaciones.

No existe una solución simple de transferencia manual que haga todo esto, que no solo replique lo que hace el complemento desde dentro de sus propias funciones.php

  • Permalink mejores y lógicos como myblog.com/my-category/ y myblog.com/my-category/my-post/.
  • Complemento simple: apenas agrega gastos generales.
  • Funciona de fábrica: no se necesita configuración. No es necesario modificar los archivos de wordpress.
  • No requiere otros complementos para funcionar.
  • Compatible con complementos de mapa de sitio.
  • Funciona con múltiples subcategorías.
  • Funciona con WordPress Multisite.
  • Redirige los permalinks de la categoría anterior a los nuevos (redirección 301, buena para SEO).

Además, obtienes la ventaja de que si wordpress cambia, el plugin se actualizará para que funcione, mientras que tendrás que descubrir cómo arreglar tu propio código por tu cuenta.


Si todavía está buscando la combinación (etiquetas, categorías y páginas en la base de la URL), puede hacerlo como yo lo hice.

Probado usando Wordpress 3.9.1

Si tiene páginas, categorías o etiquetas con el mismo nombre, el sistema tomará:

  1. etiqueta
  2. página
  3. categoría

Si usas el plugin Yoast SEO solo ve a:

Advanced > Permalinks > Change URLs

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

En cuanto a la eliminación de etiquetas, aún no encontré ninguna solución.


en lugar de poner esto en sus 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/", "/", $string ); return trailingslashit( $aa_g ); } if ( $type == ''category'' ) return trailingslashit( $string ); } return $string; } add_filter( ''user_trailingslashit'', ''fix_slash'', 55, 2 );