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.
Pridaj komentár