WordPress bug pri vyhľadávaní v taxonómii

V aktuálnej verzii WordPressu (3.0.1) sa nachádza bug, kvôli ktorému nie je možné vyhľadávať príspevky vo vlastnej taxonómii (vlastné kategórie,…). Samozrejme vďaka veľkej modulárnosti WordPressu sa to dá jednoducho ľahko opraviť.

Napríklad pri nasledovnom volaní funkcie query_posts WordPress ignoruje parametre taxonomy a term:

query_posts('taxonomy=jazyk&term=sk&s=hladane_slovo');

Volanie danej funkcie by malo vybrať články, ktoré majú priradený parameter (term) sk v taxonómii jazyk a obsahujú slovo hladane_slovo. Avšak jediné čo sa bude brať do úvahy je hľadané slovo. Toto platí aj pre prípad, že by boli rovnaké parametre zadané do URL. Toto je bug, ktorý by mal byť opravený vo verzii 3.1.

Ak to však potrebujete použiť už teraz, tak tu je riešenie tohoto problému:

function mr_search_join($join, $wp_query) {
	global $wpdb, $lang;
	
	if(!$wp_query->is_tax && is_search() && !is_admin()) {
		$join .= " JOIN $wpdb->term_relationships tr1 ON ($wpdb->posts.ID = tr1.object_ID)
				JOIN $wpdb->term_taxonomy tt1 ON (tr1.term_taxonomy_id = tt1.term_taxonomy_id)
				JOIN $wpdb->terms t1 ON (tt1.term_id = t1.term_id AND tt1.taxonomy = 'jazyk' AND t1.slug = '$lang')";	
	}

	return $join;
}
add_filter('posts_join', 'mr_search_join', 10, 2);

Daný kód pri vyhľadavaní modifikuje SQL, aby sa brali do úvahy aj parametre pre jazyk daného príspevku. Zámerne kontrolujem aj hodnotu $wp_query->is_tax, ktorá by mala byť nastavená na true, keď bude problém opravený a tým pádom sa SQL nebude dodatočne modifikovať.

Ináč dané riešenie ráta s tým, že bude nastavené globálna premenná $lang a pri vyhľadávaní sa budú zobrazovať len príspevky v danom jazyku.

Názor na “WordPress bug pri vyhľadávaní v taxonómii

  1. depi

    Tych bugov co sa tyka custom post typov a taxonomii tam bude viac. Napriklad ani funkcia wp_get_archives() nie je prisposobena na vyhladavanie vlastnych post-typov a vlastny mesacny archiv si tym padom nevytvoris. (teda pokial to opat nejak “nefixnes” sam)

    Dalsia podivna vec co som si vsimol je, ze ked v Settings -> Reading -> nastavis nejaku Page pre zobrazovanie postov a mas okrem toho vytvorene aj nejake Custom Post Types, tak ked si na ich “single page”, v menu (postaveneho cez Menus) sa prida .current_page_parent CSS class pre stranku, kt. si si nastavil v Readingu pre posty. Pritom to nema ziadnu logiku.

    Inak tieto nove veci su super, len ich treba este dotiahnut do konca.

Pridaj komentár

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

Môžete použiť tieto HTML značky a atribúty: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>