-
Search Results
-
Topic: Query issues
Hey, guys!
We’re trying to display posts differently for logged in users and anonymous users (i.e. some posts are available only for logged in users). The problem is that when connecting to the ‘sf_edit_query_args_after_custom_filter’ hook the cache query is affected and the results are incomplete; the ‘sf_edit_query_args’ hook the cache works correctly but the listing displays wrong counter.
My question is: is there any hook that can alter only the results displayed so that the cache query is not affected?
Bellow is the code needed to run on the results found:function _query_filter($query_args, $sfid) { $post_type = get_query_var( 'post_type' ); $affected_post_types = array( 'module', 'learning-object', 'success-story' ); if ( !is_post_type_archive( $affected_post_types ) || is_admin() ) { return $query_args; } // echo '<pre>'; print_r( get_query_var( 'post_type' ) ); echo '</pre>'; exit; $meta_query = array( 'relation' => 'AND' ); $posts_per_page = '12'; $post_status = array( 'publish' ); if ( is_user_logged_in() ) { if ( current_user_can('partner') || current_user_can('manage_options') || ( current_user_can( 'member' ) && preg_match( '/^(\/step\/)/i', $_SERVER['REQUEST_URI'] ) ) ) { $post_status[] = 'draft'; $post_status[] = 'private'; $post_status[] = 'internal'; } } $query_args['orderby'] = 'date'; $query_args['order'] = 'DESC'; if ( $post_type != 'learning-object' ) { $posts_per_page = 6; } if ( !isset( $_GET['_sfm_language'] ) ) { $selected_language = ''; if ( !defined( 'ICL_LANGUAGE_CODE' ) ) { define( 'ICL_LANGUAGE_CODE', 'en' ); } switch ( ICL_LANGUAGE_CODE ) { case 'fi': $selected_language = 'Finnish'; break; case 'de': $selected_language = 'German'; break; default: $selected_language = 'English'; break; } // $meta_query[] = array( // 'relation' => 'OR', // array( // 'key' => 'language', // 'compare' => 'NOT EXISTS' // ), // array( // 'key' => 'language', // 'value' => $selected_language // ) // ); } if ( !is_user_logged_in() ) { $meta_query[] = array( 'relation' => 'OR', array( 'key' => 'is_public', 'compare' => 'NOT EXISTS' ), array( 'key' => 'is_public', 'value' => 'yes' ) ); } $query_args['post_status'] = $post_status; $query_args['meta_query'] = $meta_query; $query_args['posts_per_page'] = $posts_per_page; // echo '<pre>'; print_r( $query_args ); echo '</pre>'; return $query_args; } // add_filter( 'sf_edit_query_args', '_query_filter', 10, 2 ); add_filter( 'sf_edit_query_args_after_custom_filter', '_query_filter', 10, 2 );
Also, how can we update the counters to reflect only the displayed results?
Hello guys!
I have a custom sf_filter_query_args like so:
function sf_filter_query_args($query_args, $sfid) { if ($sfid == 327) { add_filter('posts_where', 'acf_posts_where'); $query_args['meta_query'] = array( 'relation' => 'AND', array( 'key' => 'likes_%_gebruiker', 'value' => '16', 'compare' => 'LIKE' ) ); } return $query_args; } add_filter('sf_edit_query_args', 'sf_filter_query_args', 10, 2);
Which works perfectly when I come on the page. It filters succesfully on the meta_query. But when I select a filter it returns all result and not the results where likes_%_gebruiker is 16 + the filters.
Am i doing something wrong? Can someone help me out?
Thanks
I have a filter set up to find all posts with a relationship to an ACF called “people”, it returns all results with a relationship to a “person” post but I would also like to return the “person” post itself in the search results.
What is the easiest way to include it in my results?
I have tried something like this:function people_filter( $query_args, $sfid ) { if($sfid == 7287) { if ($_GET["_sfm_people"] != "") { $query_args['p'] = intval($_GET["_sfm_people"]); } } return $query_args; } add_filter( 'sf_edit_query_args', 'people_filter', 10, 200 );
But this returns the “person” post only, I would instead like to add it to the already compiled results.