Úvodní stránka › Fórum podpory WordPressu › Problémy s WordPressem › Vyhledávání – vlastní typy obsahu
Zvolené téma obsahuje celkem 8 odpovědí. Do diskuze (3 účastníci) se naposledy zapojil uživatel zmesa47 a poslední změna je stará 13 let, 3 měsíce.
-
AutorPříspěvky
-
30. listopadu 2011 (15:30) #1296
Zdravím,
na webu jsou nadefinované celkem 4 vlastní typy obsahu. Výchozí vyhledávání hledá všude, včetně těchto vlastních typů.
Potřeboval bych omezit vyhledávání ve stránce jen na založené stránky a příspěvky – tak, aby do výsledků hledání vlastní typy obsahu nebyly zahrnuty.
Pomocí:
function excludePages($query) {
if ($query->is_search) {
$query->set('post_type', 'page');
}
return $query;
}
add_filter('pre_get_posts','excludePages');jsem sice “donutil” WP hledat jen na stránkách, ale již se mi nepodařilo aby do hledaní byly zahrnuty i příspěvky.
Nebyl by náhodou nějaký nápad?
Děkuji
30. listopadu 2011 (16:44) #9962Ano, koukněte zde: http://speckyboy.com/2010/09/19/10-useful-wordpress-search-code-snippets/
30. listopadu 2011 (16:53) #9963zmesa47: Pěkné, chválím využití filtru pre_get_posts.
Podle mě stačí jediná drobná změna, a to upravit řádek, kde definujete použité vlastní typy obsahu:
$query->set( 'post_type', array( 'post', 'page' ) );
Netestováno…
30. listopadu 2011 (16:58) #9964Pak jde ještě různě pomocí snippů separovat kategorie apd.
30. listopadu 2011 (17:16) #9965Díky oběma.
$query->set( ‘post_type’, array( ‘post’, ‘page’ ) ); – takto nějak jsem to myslel. Zkusil jsem a funguje to – vyhledávání jde jen po stránkách a příspěvcích.
Bohužel to má i chybku: na webu je použit i WPML a ten teď u drobečkové navigace vypisuje:
Warning: Illegal offset type in isset or empty in cesta k souborumwp-includesquery.php on line 1875
Tato chybka je jen na stránce vyhledávání (search.php)
Netuším co tam je špatně nebo co je prázdné.
1. prosince 2011 (21:58) #9966Možností máte několik:
1) Odstranit drobečkovou navigaci z výsledků vyhledávání (logicky tam ani není moc potřeba).
2) Pokud jste definoval své vlastní typy obsahu, tak nastavte argument exclude_from_search u funkce register_post_type() na hodnotu true. Tím vcelku jednoduše vyloučíte konkrétní vlastní typ obsahu z výsledků vyhledávání.
3) Dále můžete zkusit použít jiný filtr, např. the_search_query (příklad). Tím vyloučíte případný konflikt s WPML u filtru pre_get_posts (u něj ale ještě můžete zvýšit či snížit prioritu, což by také mohlo pomoci).
4) A nakonec můžete zkusit přidat skryté pole přímo do vyhledávacího formuláře (obvykle soubor searchform.php v adresáři šablony), což by mohlo také pomoci (zdroj).
<input type="hidden" name="post_type" value="post,page" />
2. prosince 2011 (13:23) #9967Díky,
přesně takto jsem potřeboval nakopnout :-)
1) takto bylo vyřešeno s tím, že pokud je zobrazena stránka vyhledávání, tak není navigace, ale jen odkaz na home
2) “exclude_from_search” jsem přehlédl v dokumentaci – díky za připomenutí funkce – doplním do definice vlastních typů
3) zkusím prostudovat
4) toto jsem ještě nezkoušel
Ještě jednou děkuji za skvělou pomoc.
4. prosince 2011 (17:01) #9968A když WPML deaktivujete, tak předchozí postup funguje bez problémů?
Každopádně dejte prosím vědět, jak to celé dopadlo, respektive který způsob nakonec fungoval…
5. prosince 2011 (16:56) #9969Tak jsem to testoval:
– když je WPML deaktivován, tak funce je OK a bez chyb
– skryté pole u vyhledávacího formuláře nepomohlo
– “exclude_from_search” je to správné řešení – po přidání již daný typ obsahu již není ve výsledcích
Výsledek:
– přidání “exclude_from_search” ke všem vlastním typům obsahu
– na stránce výsledků vyhledávání odstraněna navigace od WPML a nahrazena odkazem na home
– výše uvedený filtr “pre_get_posts” již není potřeba
-
AutorPříspěvky
Pokud chcete odpovědět na toto téma, musíte se nejdříve přihlásit.