Home › Forums › Product Support Forums › Ajax Search Pro for WordPress Support › Passing a custom callback function and sorting based on the return.
This topic contains 5 replies, has 2 voices, and was last updated by Ernest Marcinko 2 years, 5 months ago.
- AuthorPosts
- October 7, 2020 at 12:13 am #29661
Hi there.
This isn’t really a specific issue…but after reading documentation and knowledgebase I can’t seem to figure out how to do what I would like to do.Somewhere in the process of doing a search…I would like to execute a custom call back function that compares the resulting posts to information that is specific to a user…and if that function returns true…put those posts on the top of the results (or otherwise style them so they stand out).
The users have inventories of ingredients and there are posts that are recipes. I have a function that checks the recipe to the users inventory…and if they have the right ingredients…it means they can make the recipe.
I already have the function that determines whether or not a person can make a recipe.
I would like to be able to filter and/or sort the ASP results by whether or not a user can make the recipe.
I have been through a lot of the documentation…but can’t seem to figure out how to accomplish this. If you can help me out or point me in the right direction I would appreciate it.
Thanks you for your time.
Gabe
October 7, 2020 at 9:52 am #29666Hi Gabe,
You are looking for the asp_results hook. That lets you make changes to the final results array before it is printed to the output.
In you case, I would start of with something like this:
add_filter( 'asp_results', 'asp_custom_results_order', 10, 1 ); function asp_custom_results_order( $results ) { $front = array(); // Results prioritized $back = array(); // Rest of the results // Parse through each result item foreach ($results as $k=>&$r) { if ( isset($r->post_type) ) { if ( your_function_to_check($r->id, get_current_user_id() ... ) ) { $front[] = $r; } else { $back[] = $r; } } else { $back[] = $r; } } return array_merge($front, $back); }
This code skeleton helps you separate the results into two parts – front and back. The $front array goes to the front of the list, the $back contains the rest of the results. Then you can go through all of the results, check whatever you need, and put the result into either the $front of the $back.
Best,
Ernest Marcinko
If you like my products, don't forget to rate them on codecanyon :)
October 10, 2020 at 12:08 am #29725For some strange reason I can’t get any ASP specific filters to fire. I can get core WP filters to fire.
I tried both the code you provided and just copy/pasted some examples from the documentation and can’t seem to get them to do anything…even throw errors on intentional typos. I only have one search so the ID should be correct.
The search works fine. I have the search filtering an elementor posts page as well…no problem. I just can’t seem to be able to grab on to that asp_results hook.
October 10, 2020 at 11:32 am #29730May I take a look at this somewhere, or can you pelase share the code? I tried a few variations on our test servers, but it all worked okay.
Best,
Ernest Marcinko
If you like my products, don't forget to rate them on codecanyon :)
October 11, 2020 at 3:30 am #29734Thank you for your time Ernest. I got it sorted out. There was something upstream in my functions.php that was interfering with filters and short codes.
The code example you provided is working great now.
Thank you for your help and a great plugin!
October 12, 2020 at 8:46 am #29737You cannot access this content. Best,
Ernest Marcinko
If you like my products, don't forget to rate them on codecanyon :)
- AuthorPosts
You must be logged in to reply to this topic.