Potřebuji náhodné (a unikátní) alfanumerické permalinky. Díval jsem se na několik pluginů, ale zdá se, že všechny formy přesměrování na delší URL. To není to, co chci, chci změnit permalink.
V podstatě chci URL jako bit.ly nebo 9gag.com.
Hledal jsem, ale při vyhledávání jsem přišel prázdný - existuje plugin, který to dělá? Pokud ne, mohl by mě někdo nasměrovat správným směrem, jak to dosáhnout? Jsem dost sebevědomý v PHP, ale zatím jsem s WordPressem velmi dobře neznal.
Nejjednodušší způsob, jak jsem si myslel, je něco jako add_filter("post_slug", md5(Rand()))
(pokud to byl vlastně platný kód). Samozřejmě bych musel zkontrolovat duplikáty slimáků a co ne ...
Upřímně řečeno, co bych raději raději preferoval, je něco jako: example.com/prefix/hf434g5ay/postname
V tom je /prefix/alphanumeric-key
vyžadováno, ale pro SEO je použito poštovní jméno.
Pokud byste chtěli, aby vaše slimáci pro SEO, pak budete chtít definovat nový přepis tag a ponechat výchozí chování pro post slugs.
Chcete-li mít jedinečné ID, pak místo vyhledání možných duplikátů, proč nejen znovu použít ID příspěvku, který je zaručen jedinečným vzhledem k primárnímu indexu MySQL - můžete jej převést na číslo base36, pokud chcete. vypadat spíš jako 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 );
Pak změňte strukturu permalinks na /%my_id%/%postname%/
v Nastavení - Permalinks. Pokud chcete více než 0-9 a malá písmena, můžete se podívat na některé implementace základny 62 , i když nejsem velkým fanouškem případových případů. citlivých adres URL.
Doufám, že to pomůže.
Chcete-li k příspěvku připojit něco náhodného:
add_filter( 'wp_unique_post_slug', 'unique_slug_108286', 10, 4 );
function unique_slug_108286( $slug) {
$slug = mt_Rand(); //just an example
return $slug;
}
Jsem si docela jistý, že WP zvládne duplikáty pomocí tohoto filtru (standardně), takže je nemusíte kontrolovat sami.
Předponu můžete přidat ručně v nastavení administrátora permalinks nastavením na něco jako /prefix/%postname%/
Pro předponu může být lepší použít kategorii nebo vlastní taxonomii. Pokud jde o nastavení náhodné slug před poštovním jménem, jako je prefix/hf434g5ay/postname
myslím, že by to vyžadovalo použití http://codex.wordpress.org/Rewrite_API , být snazší vytvořit vlastní typ příspěvku místo toho, aby se nastavovaly výchozí příspěvky.