Forums Forums Search Search Results for 'sf_input_object_pre'

Viewing 10 results - 21 through 30 (of 137 total)
  • Author
    Search Results
  • #265318

    Trevor
    Participant

    The problem is that the data is not stored in the post meta table field as correctly serialized data (in the normal WordPress format), so, our cache building code sees it as one big term, rather than separate terms.

    This post asked a similar question:

    https://support.searchandfilter.com/forums/topic/explode-custom-field-into-several-records-on-the-cache-table/

    The sf_input_object_pre filter could only work if the values had been cached separately (in fact, chances are you would not have needed your code at all).


    Anonymous
    Inactive

    Hi Trevor,
    thanks for the link, but I’m not sure what I should do now.
    I understand I have to enter the field name it concerns:

    
    function filter_function_name($input_object, $sfid)
    {
      if($input_object['name']=='_company_name')
      {
        //udpate this field before rendering
      }
      
      return $input_object;
    }
    add_filter('sf_input_object_pre', 'filter_function_name', 10, 2);
    

    But beyond that, I don’t know how to trim it down to 10 and how to sort them by number. I went through the code on the github page that is referred to, but that doesn’t bring me further. Can you help me get this right?

    #264919

    Trevor
    Participant

    As this is a Taxonomy/Category/Tag field, then you will need to code a solution. You can use this filter in your child theme’s functions.php file:

    https://searchandfilter.com/documentation/action-filter-reference/#filter-input-object

    To re-order the terms in the field.

    I am not sure if it will help, but if there are many snippets already in the forum, this forum search should find them:

    https://support.searchandfilter.com/forums/search/sf_input_object_pre+function+order/

    #262980

    Trevor
    Participant

    If it is a Post Meta field, then you can set the source to Manual and drag and drop them. If it is a Taxonomy, then you will need to code a solution. You can use this filter in your child theme’s functions.php file:

    https://searchandfilter.com/documentation/action-filter-reference/#filter-input-object

    To re-order the terms in the field.

    I am not sure if it will help, but if there are many snippets already in the forum, this forum search should find them:

    https://support.searchandfilter.com/forums/search/sf_input_object_pre+function+order/


    Anonymous
    Inactive

    While this thread is a few months old, here is the code for my solution used for a current project. The code below gets the terms for the taxonomy called ‘commodity_codes’ and then updates the Search and Filter field ‘_sft_commodity_codes’ in my search forms by leaving the value intact for the query and simply updating the label to be a concatenation of the term name and the first 21 characters of the description with camel casing.

    Thanks to the gist here: https://gist.github.com/rmorse/7b59b45a14b1ca179868

    function filter_function_name($input_object, $sfid)
    {
    	if($input_object['name']=='_sft_commodity_codes')
    	{
    		//if we want to filter the options generated, we need to make sure the options variable actually exists before proceeding (its only available to certain field types)
    		if(!isset($input_object['options']))
    		{
    			return $input_object;
    		}
    		
    		//get the terms for the taxonomy
    		$terms = get_terms('commodity_codes');
    		
    		//now we know there are options we can loop through each one, and change what we need
    		foreach($input_object['options'] as $option)
    		{
    			foreach($terms as $term)
    			{
    				if($term->name==$option->value)
    				{//we want to change the label for the option "black" - we can feed back in the count number to the label for this field type
    					$option->label = $term->name . ' : ' . ucwords(substr($term->description,0,21));
    				}
    			}
    		}
    	}
    	
    	return $input_object;
    }
    add_filter('sf_input_object_pre', 'filter_function_name', 10, 2);

    Hope this helps others.

    — Tom @NPCrowd : https://npcrowd.com

    #262072

    In reply to: Multipel Tags fields


    Trevor
    Participant

    I think it should be this:

    //Search & filters hook
    
    function update_range_field_mileage($input_object, $sfid)
    {
    //make sure we affect the '_sfm_standby_power_esp_kvs_nr' field only
    if($input_object['name']=='_sfm_standby_power_esp_kvs_nr' && $sfid==1893)
    {
    //udpate this field before rendering
    //all the options are stored in $input_object['options'] as an array
    $new_options = array();
    
    //create a new "default" option
    $new_option = new StdClass();
    $new_option->value = "";
    $new_option->label = "kVA";
    array_push($new_options, $new_option);
    
    //create a new range option we want to add
    $new_option = new StdClass();
    $new_option->value = "10+50"; //this is the value that goes in the URL, which affects the query
    $new_option->label = "10 – 50"; //the label can be anything
    array_push($new_options, $new_option);//create a new range option we want to add
    
    $new_option = new StdClass();
    $new_option->value = "51+200"; //this is the value that goes in the URL, which affects the query
    $new_option->label = "51 – 200"; //the label can be anything
    array_push($new_options, $new_option);
    
    $new_option = new StdClass();
    $new_option->value = "201+400"; //this is the value that goes in the URL, which affects the query
    $new_option->label = "201 – 400"; //the label can be anything
    array_push($new_options, $new_option);
    
    $new_option = new StdClass();
    $new_option->value = "401+700"; //this is the value that goes in the URL, which affects the query
    $new_option->label = "401 – 700"; //the label can be anything
    array_push($new_options, $new_option);
    
    $new_option = new StdClass();
    $new_option->value = "701+1500"; //this is the value that goes in the URL, which affects the query
    $new_option->label = "701 – 1500"; //the label can be anything
    array_push($new_options, $new_option);
    
    $new_option = new StdClass();
    $new_option->value = "1501+2500"; //this is the value that goes in the URL, which affects the query
    $new_option->label = "1501 – 2500"; //the label can be anything
    array_push($new_options, $new_option);
    
    //now replace the options with our own custom options:
    $input_object['options'] = $new_options;
    }
    
    return $input_object;
    }
    add_filter('sf_input_object_pre', 'update_range_field_mileage', 10, 2);
    #262056

    In reply to: Multipel Tags fields


    Anonymous
    Inactive

    Hi Trevor

    Thanks.

    Can you just check if it is done correctly with form id if($sfid==1893)

    Thanks

    //Search & filters hook
    
    function update_range_field_mileage($input_object, $sfid)
    {
    //make sure we affect the '_sfm_standby_power_esp_kvs_nr' field only
    if($input_object['name']=='_sfm_standby_power_esp_kvs_nr')
    
    if($sfid==1893)
    {
    //udpate this field before rendering
    //all the options are stored in $input_object['options'] as an array
    $new_options = array();
    
    //create a new "default" option
    $new_option = new StdClass();
    $new_option->value = "";
    $new_option->label = "kVA";
    array_push($new_options, $new_option);
    
    //create a new range option we want to add
    $new_option = new StdClass();
    $new_option->value = "10+50"; //this is the value that goes in the URL, which affects the query
    $new_option->label = "10 – 50"; //the label can be anything
    array_push($new_options, $new_option);//create a new range option we want to add
    
    $new_option = new StdClass();
    $new_option->value = "51+200"; //this is the value that goes in the URL, which affects the query
    $new_option->label = "51 – 200"; //the label can be anything
    array_push($new_options, $new_option);
    
    $new_option = new StdClass();
    $new_option->value = "201+400"; //this is the value that goes in the URL, which affects the query
    $new_option->label = "201 – 400"; //the label can be anything
    array_push($new_options, $new_option);
    
    $new_option = new StdClass();
    $new_option->value = "401+700"; //this is the value that goes in the URL, which affects the query
    $new_option->label = "401 – 700"; //the label can be anything
    array_push($new_options, $new_option);
    
    $new_option = new StdClass();
    $new_option->value = "701+1500"; //this is the value that goes in the URL, which affects the query
    $new_option->label = "701 – 1500"; //the label can be anything
    array_push($new_options, $new_option);
    
    $new_option = new StdClass();
    $new_option->value = "1501+2500"; //this is the value that goes in the URL, which affects the query
    $new_option->label = "1501 – 2500"; //the label can be anything
    array_push($new_options, $new_option);
    
    //now replace the options with our own custom options:
    $input_object['options'] = $new_options;
    }
    
    return $input_object;
    }
    add_filter('sf_input_object_pre', 'update_range_field_mileage', 10, 2);
    #262027

    In reply to: Multipel Tags fields


    Trevor
    Participant

    Hi

    Great to speak with you Sasha. The link for the main function was this:

    https://support.searchandfilter.com/forums/topic/range-overlap/#post-231607

    Testing the form id would make it look like this:

    function update_range_field_mileage($input_object, $sfid)
    {
    	//make sure we affect the '_sfm_mileage' field only, and only in form ID 12345
    	if( $sfid == 12345 && $input_object['name']=='_sfm_mileage' )
    	{
    		//udpate this field before rendering
    		//all the options are stored in <code>$input_object['options']</code> as an array
    		$new_options = array();
    		
    		//create a new "default" option
    		$new_option = new StdClass();
    		$new_option->value = "";
    		$new_option->label = "KM Stand";
    		array_push($new_options, $new_option);
    		
    		//create a new range option we want to add
    		$new_option = new StdClass();
    		$new_option->value = "0+49999"; //this is the value that goes in the URL, which affects the query
    		$new_option->label = "0 - 49999"; //the label can be anything
    		array_push($new_options, $new_option);//create a new range option we want to add
    		
    		$new_option = new StdClass();
    		$new_option->value = "50000+99999"; //this is the value that goes in the URL, which affects the query
    		$new_option->label = "50000 - 99999"; //the label can be anything
    		array_push($new_options, $new_option);
    		
    		$new_option = new StdClass();
    		$new_option->value = "100000+150000"; //this is the value that goes in the URL, which affects the query
    		$new_option->label = "100000 - 150000"; //the label can be anything
    		array_push($new_options, $new_option);
    		
    		
    		//now replace the options with our own custom options:
    		$input_object['options'] = $new_options;
    	}
    	
    	return $input_object;
    }
    add_filter('sf_input_object_pre', 'update_range_field_mileage', 10, 2);

    Do let me know how you get on?

    #261160

    Trevor
    Participant

    There ARE some shared snippets on the forum. Try this search:

    https://support.searchandfilter.com/forums/search/sf_input_object_pre+function+order/

    If you produce something, but it doesn’t quite work, by all means share the code for us to take a look at. Custom coding doesn’t really fall within the scope of our support, but we will help where we can.

    #260793

    Ross
    Keymaster

    Hi Sunny

    You can replace the ID’s, by post title, by adding this to functions.php:

    
    function filter_input_object($input_object, $sfid) {
    	
    	if(($input_object['name'] == '_sfm_podsrelationship')) {
    		
    		foreach($input_object['options'] as $option) {
    			$option->label = get_the_title($option->value);
    		}
    		
    		return $input_object;
    	}
    	else {
    		
    		return $input_object;
    	}
    }
    add_filter('sf_input_object_pre', 'filter_input_object', 10, 2);

    Make sure to change the name of the field to match yours:
    _sfm_podsrelationship

    To find your field name, just check the URL when you do a search:
    https://searchandfilter.com/documentation/accessing-search-data/?sfref=dc#how-to-get-the-field-name

    Let me know how you get on.

    Thanks

Viewing 10 results - 21 through 30 (of 137 total)