Rimuovi categoria e tag base dall’URL di WordPress – senza un plugin

Vorrei rimuovere la categoria e la base di tag dall’URL di wordpress. Mi sono imbattuto in altri post e soluzioni che utilizzavano plug-in. Mi piacerebbe stare lontano dai plugin e avere una soluzione all’interno di functions.php. Ciò eviterebbe la modifica di futuri aggiornamenti del plugin o di file predefiniti di wordpress.

Qualsiasi aiuto sarebbe apprezzato. Grazie!

Ho provato queste soluzioni finora:

  • Questa soluzione di Htaccess non ha funzionato: http://mikepayne.co/2011/remove-category-base-from-url/
  • Questi metodi hanno anche fallito: http://www.askapache.com/wordpress/remove-category-wordpress-urls.html

Mi è piaciuta questa soluzione:

Se vuoi rimuovere /category/ dall’URL, segui questi due passaggi:

  1. Vai a Impostazioni >> Permalink e seleziona Personalizzato e inserisci: /%category%/%postname%/
  2. Quindi imposta la tua Base Categoria su .

Salvalo e vedrai il tuo URL modificato in questo formato: http: /yourblog.com/quotes/

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

  1. Imposta struttura personalizzata: /% postname% /
  2. Imposta la base della categoria:. (punto non /)

  3. Salvare. 100% funziona correttamente.

Mentre lo si elimina come soluzione, il plug-in è di gran lunga il metodo più semplice e coerente e non modifica alcun file predefinito di wordpress.

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

Non ha bisogno di essere aggiornato per un anno, quindi non crea esattamente problemi con gli aggiornamenti.

Non esiste una semplice soluzione arrotolata a mano che faccia tutto ciò che non si limita a replicare ciò che fa il plugin all’interno delle proprie funzioni.

  • Permalink migliori e logici come myblog.com/my-category/ e myblog.com/my-category/my-post/.
  • Semplice plug-in – aggiunge a malapena qualsiasi sovraccarico.
  • Funziona fuori dalla scatola – nessuna configurazione necessaria. Non è necessario modificare i file wordpress.
  • Non richiede altri plug-in per funzionare.
  • Compatibile con plug-in Sitemap.
  • Funziona con più sottocategorie.
  • Funziona con WordPress Multisito.
  • Reindirizza i vecchi permalink di categoria a quelli nuovi (reindirizzamento 301, buono per SEO).

Inoltre si ottiene il vantaggio che se wordpress cambia, quindi il plugin verrà aggiornato per funzionare mentre si dovrà quindi capire come risolvere il proprio codice per conto proprio.

Se usi il plugin Yoast SEO vai su:

 Advanced > Permalinks > Change URLs 

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

Per quanto riguarda la rimozione dei tag, non ho ancora trovato alcuna soluzione.

invece metti questo nel tuo functions.php funziona bene, nessun problema di reindirizzamento.

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

Il trucco del punto probabilmente rovinerà i tuoi feed RSS e / o l’impaginazione. Questi funzionano, tuttavia:

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

Il plug-in non di categoria non ha funzionato per me.

Per WordPress Multisito i seguenti lavori:

  1. Vai ai siti di amministrazione di rete;
  2. Apri sito in \ ;
  3. Vai alle impostazioni;
  4. Sotto il tipo di struttura dei permalink /%category%/%postname%/ . Questo mostrerà il tuo url come www.domainname.com/categoryname/postname ;
  5. Ora vai al dashboard del tuo sito (non alla dashboard di rete);
  6. Apri le impostazioni;
  7. Open permalink. Non salvare (il permalink mostrerà il campo non yourdoamainname/blog/ come yourdoamainname/blog/ . Ignora. Se si salva ora il lavoro eseguito nel passaggio 4 verrà sovrascritto. Questo passaggio di apertura della pagina di permalink ma non il salvataggio necessario per aggiornare il database.

Se stai ancora cercando la combinazione (tag, categorie e pagine sull’url-base), puoi farlo come ho fatto io.

Testato con WordPress 3.9.1

Se hai pagine, categorie o tag con lo stesso nome, il sistema prenderà:

  1. etichetta
  2. pagina
  3. categoria

https://wordpress.org/plugins/remove-category-url/ Usa questo plugin fa perfettamente il lavoro di hide la categoria base Non richiede alcuna impostazione, basta installare e triggersre.

Seleziona Struttura personalizzata nei permalink e aggiungi /% category% /% postname% / dopo il tuo dominio. L’aggiunta di “/” alla base della categoria non funziona, devi aggiungere un punto / punto. Ho scritto un tutorial per questo qui: remove category from URL tutorial

risposta aggiornata:

altra soluzione:
Nel file wp-include / rewrite.php, vedrai il codice:
$this->category_structure = $this->front . 'category/'; copia semplicemente l’intera funzione, inserisci le funzioni.php e collegalo. basta cambiare la riga sopra con:
$this->category_structure = $this->front . '/';

Aggiunta di “.” o “/” non funzionerà se desideri una vista del blog consolidata. Inoltre, ho idea di cosa potrebbero fare queste soluzioni per i feed RSS o XML. Mi sento meglio attenermi alla convenzione WP. Tuttavia, ho trovato un approccio più elegante.

Innanzitutto, chiamo l’url della categoria di base “blog”

Poi ho creato una categoria chiamata “tutti”. Finalmente, ma tutte le mie sottocategorie sono sotto “tutti”. Quindi ottengo una struttura di url come questa.

 /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 

Metto un’etichetta personalizzata sulla voce di menu chiamata “Blog”, ma va al blog / tutti. Sarebbe una buona idea redirect / blog / blog / 301 tutto nel file .htaccess per evitare il 404 on / blog.