Rôzne URL pre rôzne kategórie

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é.

Pridajte sa do konverzácie

1 komentár

  1. Sorry, I know here is not the palace for contact but I can’t find where…
    Hi, I saw your translation of a WordPress plug-in on the readme file it was included and I want to ask for a little favor, I’m the author of a plug-in to show video on WordPress and today I make a very important release, I currently have some translations but I think they can be better, can you help me with the translation on your language?

    Of course your name and web address will be included on the readme file and on the WordPress plug-in site, if you are able to make the translation send it to this email with the desire name and website address and will be added.

    Here is the URL where you can download the plug-in and in the langs subfolder is the „.po“ file for the translation:

    http://wordpress.org/extend/plugins/stream-video-player/

    Thanks a lot for your time.

Zanechať komentár

Vaša e-mailová adresa nebude zverejnená. Vyžadované polia sú označené *