J'ai besoin de permaliens alphanumériques aléatoires (et uniques). J'ai examiné plusieurs plugins, mais ils semblent tous effectuer une forme de redirection vers une URL plus longue. Ce n'est pas ce que je veux, je veux que le permalien soit changé.
En gros, je veux des URL comme bit.ly ou 9gag.com.
J'ai regardé, mais suis arrivé vide dans mes recherches - existe-t-il un plugin qui fait ça? Sinon, quelqu'un pourrait-il m'indiquer dans quelle direction je pourrais l'accomplir? Je suis assez autonome en PHP mais je ne connais pas encore WordPress.
Le moyen le plus simple auquel je puisse penser est quelque chose comme add_filter("post_slug", md5(Rand()))
(s’il s’agissait d’un code valide). Évidemment, je devrais vérifier s'il y avait des doublons et ce qui ne l'était pas ...
Honnêtement, ce que je préférerais de loin, c’est quelque chose comme: example.com/prefix/hf434g5ay/postname
En ce sens que /prefix/alphanumeric-key
est obligatoire, mais que postname est utilisé pour le référencement.
Si vous souhaitez conserver vos slugs pour le référencement, vous devrez alors définir un nouveau tag de réécriture et laisser le comportement par défaut pour les slug post.
Si vous souhaitez un identifiant unique, alors au lieu de rechercher les doublons possibles, pourquoi ne pas simplement réutiliser l'identifiant de publication, qui est garanti unique avec un index primaire MySQL - vous pouvez le convertir en base36 si vous le souhaitez ressembler plus à bitly.
add_action( 'init', function() {
add_rewrite_tag( '%my_id%', '([a-z0-9]+)' );
});
add_action( 'pre_get_posts', function( $query ) {
if ( ! $query->is_main_query() || is_admin() )
return;
$id = $query->get( 'my_id' );
if ( ! empty( $id ) ) {
$query->set( 'p', base_convert( $id, 36, 10 ) );
$query->set( 'name', null );
}
});
add_filter( 'post_link', function( $permalink, $post ) {
$id = base_convert( $post->ID, 10, 36 );
return str_replace( '%my_id%', $id, $permalink );
}, 10, 2 );
Puis changez votre structure de permaliens en /%my_id%/%postname%/
dans Paramètres - Permaliens. Si vous voulez plus de 0-9 et des caractères minuscules, vous pouvez rechercher quelques implémentations de base 62 , bien que je ne sois pas un grand fan des URL sensibles à la casse.
J'espère que cela pourra aider.
Pour ajouter un slug aléatoire à un article en utilisant quelque chose comme:
add_filter( 'wp_unique_post_slug', 'unique_slug_108286', 10, 4 );
function unique_slug_108286( $slug) {
$slug = mt_Rand(); //just an example
return $slug;
}
Je suis presque sûr que WP gérera les doublons à l'aide de ce filtre (c'est le cas par défaut), vous n'avez donc pas besoin de les vérifier vous-même.
Vous pouvez ajouter un préfixe manuellement dans vos paramètres d’administration de permaliens en le configurant comme suit: /prefix/%postname%/
Il peut être préférable d’utiliser une taxonomie de catégorie ou personnalisée comme préfixe. Pour ce qui est de définir le slug aléatoire avant le nom de poste comme prefix/hf434g5ay/postname
, je pense que cela nécessiterait l’utilisation de http://codex.wordpress.org/Rewrite_API , il serait plus facile de créer un type de publication personnalisé pour le faire au lieu de changer. la valeur par défaut "posts".