Support Forums

Looking for support? You can access the support system via your account.

Forums Forums Search & Filter Pro Multiple forms on one page + search analytics

  • This topic has 15 replies, 3 voices, and was last updated 6 years ago by Ross.
Viewing 10 posts - 1 through 10 (of 16 total)
  • Liam O’toole
    #166344

    Hello,

    I am working on a directory feature for a client and I am using S+F pro to do that. The client has requested a sidebar version and a horizontal version of the form to be present on the same page. Is it possible to get those working in sync where selections made in one form are updated in the other?

    The client has also requested that the sidebar radio buttons have hide/reveal collapse functionality. Is this something you have seen before? I know its possible to modify the markup with js to achieve this but the form reloads itself whenever ajax is engaged and the functionality would stop working. Is there a js event I can attach a callback to that will allow me to perform js work once the search results have been loaded?

    A js callback might also be useful for tracking search analytics when using ajax.

    Thank you for the help,
    Josh.

    Trevor Moderator
    #166401
    This reply has been marked as private.
    Liam O’toole
    #167242

    Thanks Trevor,

    I ended up whipping up some custom javascript to get the forms ‘working together’. It’s working well so far.

    I have another question about the random order feature and pagination. Is it possible to implement random ordering whilst maintaining accurate pagination? I ran into this issue initially on the archive view and solved it using a solution found here:

    https://hugh.blog/2013/08/22/wordpress-random-post-order-with-correct-pagination/

    I noticed that this does not work with sf pro or pages that are using sf pro and I really need it to. Currently sf pro will randomly order each page individually which effectively makes pagination useless. Is there a way around this?

    Cheers,
    Josh.

    Trevor Moderator
    #167248

    Hi Liam

    You can use this filter:

    https://www.designsandcode.com/documentation/search-filter-pro/action-filter-reference/#Edit_Query_Arguments

    To add that argument to the S&F query.

    Liam O’toole
    #167510

    Hi Trevor,

    Do you have any examples of this working? and is it possible to get this working with ajax?

    Cheers,
    Josh.

    Liam O’toole
    #167512

    I had a few cracks but so far I haven’t been able to get it working. Here is what my current code looks like.

    session_start();
    add_filter( 'sf_edit_query_args', 'filter_function_name', 20, 2 );
    function filter_function_name( $query_args, $sfid ) {
    
    	if($sfid==27339||$sfid==27361) {
    	  	// Reset seed on load of initial archive page
    		if( ! get_query_var( 'sf_paged' ) || get_query_var( 'sf_paged' ) == 0 || get_query_var( 'sf_paged' ) == 1 ) {
    			if( isset( $_SESSION['seed'] ) ) {
    				unset( $_SESSION['seed'] );
    			}
    		}
    	
    		// Get seed from session variable if it exists
    		$seed = false;
    		if( isset( $_SESSION['seed'] ) ) {
    			$seed = $_SESSION['seed'];
    		}
    	
    	    	// Set new seed if none exists
    	    	if ( ! $seed ) {
    	      		$seed = rand();
    	      		$_SESSION['seed'] = $seed;
    	    	}
    	
    	    	// Update ORDER BY clause to use seed
    	    	$order_args = array(
    	    		'orderby' => 'RAND(' . $seed . ')'
    	    	);
        	$query_args = wp_parse_args( $query_args, $order_args );
    	}
    
    	return $query_args;
    }
    Trevor Moderator
    #167537

    I am afraid that I do not. I have not heard of anyone doing what you are attempting. IF it can be done, it would be by using that filter, but that is all I can say. WordPress does not handle the random order very well (it os not Search & Filter that does this, but WordPress).

    Liam O’toole
    #167833

    Do you at least know if I’m on the right track with the sf pagination query var?

    ‘get_query_var( ‘sf_paged’ )’

    This should be fairly basic if I can get the syntax down. The function is relying on paged data in order to detect a refresh of the query. SF pro modifies the format of the query so I’m not sure what changes I need to make to be able to correctly manage the sf pages. Can you help me with that? If I can do that then this should be pretty straight forward.

    Trevor Moderator
    #167891

    You could test what you get from that function by echoing what it contains on to the page inside some identifying HTML so it stands out and is easy to spot.

    I can refer it to the developer to ask him if he can cats an eye over your code, if you wish?

    Liam O’toole
    #168110

    Hi Trevor,

    I have been doing exactly that and I think I have gotten pretty close to getting this solved but I have hit another snag. I think the only problem I have now is that I cant get the session variable to stick whilst using the filter you supplied. The filter might be running before the session data is loaded or the session data may not work inside of the filter. I might need to find another method of storing the rand seed variable into user cookies or something similar.

    I have modified the sf form and taken it off rand. I am now using the function to apply the random order, which means I can control the incoming arguments whereas I couldnt before. I am collecting the query args from the filter then assessing the paged data and at that point will create or reuse the random seed session variable. The only problem I have is the filter is not detecting the stored session data, I assume this is because the filter is running before the session data is loaded? that would explain why its being reset every time.

    I feel like is pretty close to working and would really appreciate if you could ask your developer to take a quick look at the function. This is what I have so far:

    session_start();
    add_filter( 'sf_edit_query_args', 'filter_function_name', 20, 2 );
    function filter_function_name( $query_args, $sfid ) {
    
    	if($sfid==27339||$sfid==27361) {
    
    	  	// Detect first page and reset seed
    		if( ! $query_args['paged'] || $query_args['paged'] == 0 || $query_args['paged'] == 1 ) {
    			?><p>first page<p><?php 
    			if( isset( $_SESSION['seed'] ) ) {
    				unset( $_SESSION['seed'] );
    				?><p>seed unset<p><?php 	
    			}
    		} else {
    			?><p>not first page<p><?php 
    		}
    		?><p>session seed value: <?php print_r($_SESSION['seed']);?></p><?php 
    		
    		// Get seed from session variable if it exists and store it
    		$seed = false;
    		if( isset( $_SESSION['seed'] ) ) {
    			$seed = $_SESSION['seed'];
    			?><p>seed session reused : <?php echo $seed ;?><p><?php 
    		}
    	
        	// Set new seed if none exists
        	if ( ! $seed ) {
          		$seed = rand();
          		$_SESSION['seed'] = $seed;
          		?><p>seed session created: <?php echo $seed;?><p><?php 
        	}
    
        	// Inject the order into the query
        	$query_args['orderby'] = 'RAND(' . $seed . ')';
    
    	}
    
    	return $query_args;
    }
    
Viewing 10 posts - 1 through 10 (of 16 total)

You must be logged in to reply to this topic.