Met de plugin BuddyPress Global Search kan je als administrator wp-admin omgeving bepalen in welke gebieden gezocht kan worden. Deze gebieden zijn bijvoorbeeld pagina’s, berichten, buddypress leden etc. Per gebied kan je ook de velden aan of uit vinken die meegenomen moeten worden in de zoekopdracht.
Echter kan de situatie zich voordoen dat je verschillende zoekformulieren wilt ondersteunen op de website. Je hebt bijvoorbeeld een algemeen zoekformulier en een dat zich moet beperken tot alleen berichten of pagina’s. Standaard heb je maar een manier van zoeken.
Als je onderstaande functie kopieert naar het functions.php van je (child) thema kan je de standaard beschikbare gebieden aanpassen. De functie krijgt alle gebieden en velden binnen als parameter in array vorm. Dit array kan je vervolgens naar wens opschonen.
In onderstaand voorbeeld wilde ik een zoekopdracht die alleen kijkt naar het gebied leden met alle gerelateerde velden. Standaard buddypress velden hebben een key die het woord “member” bevat. Zelf toegevoegde velden bevatten het woord “xprofile”. Om dit te bereiken heb ik $options opgeschoond en als return value teruggegeven.
Het is natuurlijk van belang dat je onderstaande code alleen uitvoert wanneer het specifieke zoekformulier wordt gebruikt. Je kan hiervoor kijken naar welk formulier is verstuurd (hidden element) of vanaf welke pagina de bezoeker de zoekopdracht heeft uitgevoerd.
Bezoek deze pagina om de Nederlandse vertalingen voor deze plugin te downloaden of bekijk meer WordPress berichten.
/** * This function will clean-up the items_to_search to only search in member/profile fields. * * The function buddyboss_global_search_option will return all options. For that reason we check if a array is given * because some times a string is given. This function is only interested in a array with items to search. * * @param array $options * @return array $cleanedUpItems */ function child_buddyboss_global_search_cleanup($options = array()) { if (!is_array($options)) { return $options; } $cleanedUpItems = array(); foreach($options as $searchAbleItem) { if (false !== strpos($searchAbleItem, 'member') || false !== strpos($searchAbleItem, 'xprofile')) { $cleanedUpItems[] = $searchAbleItem; } } return $cleanedUpItems; }; add_filter('buddyboss_global_search_option', 'child_buddyboss_global_search_cleanup', 10, 1);