web-dev-qa-db-fra.com

Supprimer la catégorie et la base de balises de l'URL WordPress - sans plugin

Je voudrais supprimer la catégorie et la base de balises de wordpress URL. J'ai rencontré d'autres publications et solutions qui utilisaient des plugins. J'aimerais rester à l'écart des plugins et avoir une solution à partir de functions.php. Cela empêcherait la modification des futures mises à jour de plugins ou des fichiers Wordpress par défaut. 

Toute aide serait appréciée. Merci!

J'ai essayé ces solutions jusqu'à présent:

38
cosmoonot

J'ai aimé cette solution:

Si vous souhaitez supprimer /category/ de l'URL, procédez comme suit:

  1. Allez dans Paramètres >> Permaliens et sélectionnez Personnalisé et entrez: /%category%/%postname%/
  2. Ensuite, réglez votre base de catégorie sur .

Enregistrez-le et votre URL sera modifiée au format suivant: Http: /yourblog.com/quotes/

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

47
optimiertes
  1. Définir la structure personnalisée: /% postname% /
  2. Définir la base de la catégorie:. (point not /)

  3. Sauvegarder. 100% fonctionnent correctement.

17
user4414801

Même si vous considérez cela comme une solution, le plugin est de loin la méthode la plus simple et la plus cohérente et ne modifie aucun fichier Wordpress par défaut. 

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

Il n'a pas besoin d'être mis à jour depuis un an, il ne crée donc pas de problèmes avec les mises à jour.

Il n’existe pas de solution simple à la main qui fasse tout cela sans reproduire ce que le plugin fait depuis votre propre functions.php.

  • Permaliens meilleurs et logiques comme myblog.com/my-category/ et myblog.com/my-category/my-post/. 
  • Simple plugin - ajoute à peine une surcharge. 
  • Fonctionne hors de la boîte - aucune installation nécessaire. Pas besoin de modifier les fichiers Wordpress. 
  • Ne nécessite pas d’autres plugins pour fonctionner. 
  • Compatible avec les plugins sitemap. 
  • Fonctionne avec plusieurs sous-catégories. 
  • Fonctionne avec WordPress Multisite. 
  • Redirige les permaliens de l'ancienne catégorie vers les nouveaux (redirection 301, bon pour le référencement).

De plus, vous obtenez l’avantage que si wordpress change, le plug-in sera mis à jour pour fonctionner, tandis que vous devrez trouver comment corriger vous-même votre code.

15
Anigel

Si vous utilisez le plugin Yoast SEO, allez simplement à:

Advanced > Permalinks > Change URLs

Et sélectionnez remove dans Strip the category base (usually /category/) from the category URL.

En ce qui concerne l'enlèvement de l'étiquette, je n'ai pas encore trouvé de solution.

10
paulalexandru

placez plutôt ceci dans votre functions.phpworks, pas de problème de redirection.

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

Cette astuce va probablement ruiner vos flux RSS et/ou votre pagination. Ceux-ci fonctionnent, cependant:

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

Le plugin hors catégorie n'a pas fonctionné pour moi.

Pour WordPress multisite, les travaux suivants:

  1. Accéder aux sites d’administration réseau;
  2. Ouvrir le site sous \;
  3. Aller aux paramètres;
  4. Sous type de structure permaliens /%category%/%postname%/..__, cela affichera votre URL sous la forme www.domainname.com/categoryname/postname;
  5. Accédez maintenant au tableau de bord de votre site (et non au tableau de bord réseau);
  6. Paramètres ouverts;
  7. Permalien ouvert. Ne sauvegardez pas (le permalien affichera un champ non modifiable sous la forme yourdoamainname/blog/. Ignorez-le. Si vous sauvegardez maintenant, le travail effectué à l'étape 4 sera écrasé. Cette étape d'ouverture de la page de permalien, mais non de la sauvegarde, est nécessaire pour mettre à jour la base de données.
2
Goutham

Si vous recherchez toujours la combinaison (balises, catégories et pages sur la base d'URL), vous pouvez le faire comme je l'ai fait.

Testé avec Wordpress 3.9.1

Si vous avez des pages, catégories ou balises ayant le même nom, le système prendra:

  1. étiquette
  2. page
  3. catégorie
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:

Pour supprimer le slug de catégorie des publications existantes, procédez comme suit:

  1. Accédez à Paramètres> Permaliens et changez la structure personnalisée de /%category%/%postname%/ à: /%postname%/
  2. Garder les bases de catégories et de balises vides (ce qui est également la valeur par défaut)
  3. Sauvegarder

Tous les articles sont maintenant accessibles directement via domain.com/%postname%/ et toutes les catégories sont accessibles via domain.com/category/xyz/. WordPress ajoutera automatiquement toutes les redirections 301 pour les anciennes URL. Ainsi, si quelqu'un accède à domain.com/%category%/%postname%/, il sera automatiquement redirigé vers domain.com/%postname%/.

0
Nadeem Khan

https://wordpress.org/plugins/remove-category-url/ Utilisez ce plugin, il cache parfaitement la category-baseIl ne nécessite aucun réglage, il suffit d'installer et d'activer .

0
Girish

Sélectionnez Structure personnalisée dans les permaliens et ajoutez /% category% /% postname%/après votre domaine. L'ajout de "/" à la base de catégories ne fonctionne pas, vous devez ajouter un point/point. J'ai écrit un tutoriel pour cela ici: retirer la catégorie du tutoriel URL

0
Jonny Jordan