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:
J'ai aimé cette solution:
Si vous souhaitez supprimer /category/
de l'URL, procédez comme suit:
/%category%/%postname%/
.
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/ )
Définir la base de la catégorie:. (point not /)
Sauvegarder. 100% fonctionnent correctement.
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.
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.
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.
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 );
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;
}
Le plugin hors catégorie n'a pas fonctionné pour moi.
Pour WordPress multisite, les travaux suivants:
\
;/%category%/%postname%/
..__, cela affichera votre URL sous la forme www.domainname.com/categoryname/postname
;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.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.
.
) pour la catégorie et la base de balises ( https://premium.wpmudev.org/blog/removing-category-base-urls-wordpress/ )Testé avec Wordpress 3.9.1
Si vous avez des pages, catégories ou balises ayant le même nom, le système prendra:
add_action( 'init', 'remove_category_perma' );
function remove_category_perma() {
unset($GLOBALS['wp_rewrite']->extra_permastructs['category']);
}
WordPress 5.0.2:
Pour supprimer le slug de catégorie des publications existantes, procédez comme suit:
/%category%/%postname%/
à: /%postname%/
. 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%/
.
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 .
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