WordPress umožňuje nastavenie vlastnej štruktúry permanentných odkazov (permalink), ale bohužiaľ neumožňuje nastaviť štruktúru odkazov na základe kategórie do ktorej článok patrí. Avšak vďaka jeho dizajnu nie je problém danú možnosť pridať pomocou niekoľkých funkcií.
Zoberme si napríklad web kde máme normálne články, ale aj fotografie, ktoré sú síce článkom (post), ale v kategórii Fotky a práve pre fotky chceme štruktúru odkazov vo formáte http://www.example.com/fotka/%post_id%/
, čiže napríklad http://www.example.com/id/123/
. Pričom URL pre články v ostatných kategóriách ostanú podľa nastavenia WordPressu.
Toto je možné docieliť nasledujúcim spôsobom:
Vytvoríme si filter, ktorý nám bude modifikovať permalink pre články v kategórii fotky.
function head_filter_permalinks($link, $post) { if(in_category('Fotky', $post)) { return get_bloginfo('url') . '/fotka/' . $post->ID . '/'; } return $link; } add_filter('post_link', 'head_filter_permalinks', 20, 2 );
Daný filter nám zabezpečí, že pri volaní get_permalink
pre článok z kategórie fotky sa nám vráti URL v tvare http://www.example.com/fotka/%post_id/.
Ďalej potrebujeme dosiahnuť to, aby nám WordPress takúto URL korektne spracoval. Na to musíme upraviť rewrite rules
, ktoré WP používa ak používame vlastnú štruktúru permanentných odkazov.
function head_flush_rewrite_rules() { global $wp_rewrite; $wp_rewrite->flush_rules(); } //add_action('init', 'head_flush_rewrite_rules');
Funkcia head_flush_rewrite_rules()
nám zabezpečí, že všetky rewrite rules budú vygenerované nanovo. Túto funckiu stačí zavolať len raz.
function head_add_rewrite_rules( $wp_rewrite ) { $new_rules = array( 'fotka/([0-9]+)' => "/?p=\$matches[1]", ); $wp_rewrite->rules = array_merge($new_rules,$wp_rewrite->rules); return $wp_rewrite; } add_filter('generate_rewrite_rules', 'head_add_rewrite_rules');
Filter head_add_rewrite_rules()
sa bude volať pri každom novom generovaní rewrite rules a zabezpečí nám, aby WordPress vedel spracovať naše URL pre fotky.
Generovanie vlastných URL už máme, takisto aj ich spracovanie a jediné čo nám ostalo je zaistiť, aby pri zadaní normálneho permalinku pre článok v kategórii fotky WordPress presmeroval užívateľa na adresu http://www.example.com/fotka/%post_id/
.
Na toto nám poslúži nasledujúca funkcia.
function dh_fix_permalinks() { if(!is_single()) return; global $post; if(in_category('Fotky', $post)) { if(!preg_match('#^/fotka/#', $_SERVER['REQUEST_URI'])) { wp_redirect(get_permalink($post->ID)); exit; } } } add_action('template_redirect', 'dh_fix_permalinks');
Uvedený kód stačí pridať do súboru functions.php
vo Vašej téme a rôzne permalinky pre rôzne kategórie máme tým pádom hotové.
Pridaj komentár