[wp_​unique_​post_​slug] – zmiana domyślnego linku w WordPressie

Czasa­mi zacho­dzi konflikt intere­sów dotyczą­cy adresów stron w WordPres­sie. Link to unikal­ny tekst genero­wa­ny standar­do­wo na bazie tytułu wpisu lub strony. WordPress generu­je go do każde­go typu postu w struk­tu­rze witry­ny. Jeżeli na serwer wgramy obrazek o nazwie 'pies.jpg', to otrzy­ma on link 'pies'. Gdy potem zrobi­my wpis na blogu pod tytułem "Pies", to WordPress przypi­sze mu link 'pies‑2'. I mamy konflikt, bo link wpisu jest niein­tu­icyj­ny.

Można pamię­tać, żeby zdjęcia miały inne linki, albo żeby wgrywać je potem (wtedy 'pies‑2' będzie przypi­sa­ny do zdjęcia), ale po co się obcią­żać? Wystar­czy przechwy­cić nazwę pliku wgrywa­ne­go do biblio­te­ki mediów i zmody­fi­ko­wać link tak, by nie powodo­wał konflik­tu z ważniej­szy­mi od siebie.

Z pomocą przycho­dzi filtr wp_​unique_​post_​slug, który wywołu­je funkcję z sześcio­ma argumen­ta­mi:

$slug
(string) link postu.

$post_ID
(int) ID postu. 

$post_status
(string) status postu.

$post_type
(string) Typ postu.

$post_parent
(int) ID postu nadrzędnego

$original_slug
(string) Oryginalny link postu.

Filtr wykony­wa­ny jest zawsze gdy zapisy­wa­ny jest post. Jeżeli w funkcji zwrot­nej nie wskaże­my konkret­ne­go przypad­ku, to link nie zmieni się. W poniż­szym przypad­ku wyłapa­ny jest typ postu załącz­nik (attach­ment).

function append_attachment_slug( $slug, $post_ID, $post_status, $post_type, $post_parent, $original_slug ) 
{
    if ( 'attachment' == $post_type )
        $slug = $original_slug . uniqid( '-' );
    return $slug;
}
add_filter( 'wp_unique_post_slug', 'append_attachment_slug', 10, 6 );

$slug przyj­mu­je połączo­ną wartość orygi­nal­ne­go linku i wyniku funkcji PHP uniqid, która zwraca 13 znaków genero­wa­nych na bazie czasu. Ciągi połączo­ne są myślni­kiem (zawar­tość funkcji uniqid stano­wi łącznik).

Filtr i funkcję można wgrać do pliku function.php lub w kodzie plugi­nu. Ja polecam insta­la­cję kodu w mu-plugins.

Pamię­taj, że filtr nie zmienia nazwy pliku, a jedynie link. Należy też stoso­wać dobre prakty­ki, dotyczą­ce wgrywa­nych zdjęć, aby uniknąć wielu kłopo­tów z odbio­rem strony. Niedłu­go opiszę kilka, które sam stosu­ję.

Dodaj komentarz

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.