Forums Forums Search Search Results for 'sf_input_object_pre function'

Viewing 10 results - 81 through 90 (of 106 total)
  • Author
    Search Results

  • Anonymous
    Inactive

    @Trevor I think I am explaining it wrong. I am not looking to change to order of the posts, I want to change the order of a specific S&F filter that I created using the S&F admin tools which is a list of checkboxes.

    This is what the field in S&F looks like

    And here is the filter on the front end of my site

    With CSS I already add icons for each item in the filter and that is the correct order. Now I need to hook in to the filter and change the order so that it is the same as in my admin, but I have no idea how to do that.

    I think I need the sf_input_object_pre filter and I already have this code

    function filter_function_name($input_object, $sfid) {
    
      if($input_object['name'] == '_sfm_category') {
        $input_object['attributes']['class'] = 'my-test-class';
        return $input_object;
      }
      return $input_object;
    }
    add_filter('sf_input_object_pre', __NAMESPACE__ . '\\filter_function_name', 10, 2);

    It took me an hour to figure out how I would get this name _sfm_category from my field category. It would be great if you could edit the docs and tell there

    If you are looking for your specific $input_object['name'] open your web inspector and look for the data attribute data-sf-field-name="_sfm_YOUR-FIELD-NAME"

    #182076

    Ross
    Keymaster

    Hi Jane

    Apologies for the delay – there’s been a good few things happenening and this slipped between the cracks.

    In regards to your original problem, you were setting the second hidden date field with JS, and it was not being picked up properly on load more / pagination.

    Well, we have a filter that allows you to set various attributes / values of each input field, via PHP (which I think may be more reliable):

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

    It actually gets a bit tricky targeting the second date field, as both the fields have the same name, so I did a little test and wrote this snippet which should work (add to functions.php):

    add_filter('sf_input_object_pre', 'filter_input_object', 10, 2);
    global $from_to_field_count;
    $from_to_field_count = 0;
    
    function filter_input_object($input_object, $sfid){
    	
    	//we need to target the second field with this name, 
    	$date_field_name = "_sfm_my_date_field";
    	
    	if( $date_field_name === $input_object['name']){
    		global $from_to_field_count;
    		$from_to_field_count++;
    		
    		if(2 === $from_to_field_count){
    			$input_object['attributes']['value'] = "29/07/2018";
    		}
    	}
    	
    	return $input_object;	
    }

    Make sure to replace _sfm_my_date_field with the name of your date field.

    Let me know how you get on!

    Thanks

    #161666

    Anonymous
    Inactive

    I solved the problem using the ‘sf_input_object_pre’ filter:

    add_filter('sf_input_object_pre', 'pas_filterlabels_aan', 10, 2);
    	function pas_filterlabels_aan($input_object, $sfid) {
    
    		if($input_object['name'] == '_sfm_vakdomein') {
    			foreach($input_object['options'] as $option) {
    				$term_id = $option->value;
    				if ($option->value) {
    					$term = get_term_by('id', $term_id, 'cursussoort');
    					$term_label = $term->name;
    					$option->label = $term_label.' ('.$option->count.')';
    				}
    
    			}
    			
    		}
    	
    	return $input_object;	
    	}

    Replace ‘_sfm_vakdomein’ by your input object name (is shown in the query string) and ‘cursussoort’ by your taxonomy slug.

    #152293

    Anonymous
    Inactive

    OK Here it is. I needed to show the author name by last, first, and sometimes the username by last,first. So I have a hook (which yes, you put in functions.php) and I check the form id and the field we’re outputting, and process it based on what the values are.

    If we’re looking at the author field, i basically requery the entire author list, and regenerate the list completely. You can see I exclude some authors (like admin, and some other random people i didn’t want in the list)

    If it’s the user field, i do a loop and requery the user and then adjust the info.

    I think i wrote the two if statements at different times, because the second way could probably be applied to the first. Whatever, it works.

    function sf_edit_author_field_order($input_object, $sfid)
    {
    	if( in_array( $sfid, array( 3390, 3444, 3562 ) ) && $input_object['name'] == '_sf_author' ) {
            // requery the author list
            $author_args = array(
                'exclude_admin' => true,
                'hide_empty' => true,
                'meta_key' => 'last_name',
                'orderby' => 'meta_value',
                'order' => 'ASC',
                'exclude' => array( 429, 233, 558, 7 )
            );
            $user_query = new WP_User_Query( $author_args );
            $users = $user_query->get_results();
            $new_users = array();
            $new_users[] = (object) array(
                'label' => 'All Authors',
                'attributes' => array (
                    'class' => 'sf-level-0 sf-item-0'
                ),
                'value' => '',
                'count' => 0
            );
            // go through users and get their user_nicename and display_name
            foreach( $users as $user ) {
                $new_users[] = (object) array(
                    'attributes' => array(
                        'class' => 'sf-level-0'
                    ),
                    'value' => $user->user_nicename,
                    'label' => $user->last_name . ', ' . $user->first_name,
                    'count' => 1
                );
            }
            $input_object['options'] = $new_users;
    	} else if ( $sfid == 3444 && $input_object['name'] == '_sft_userlist' ) {
            // requery the tagged user list to get their names - last, first
            // go through the options part of the object and get the user id, and then the meta info for that
            foreach ($input_object['options'] as $option) {
                // get the user id from the term meta
                $temp_term = get_term_by( 'slug', $option->value, 'userlist');
                $temp_term->meta_user_id = get_term_meta( $temp_term->term_id, 'user_id', true );
                $last_name = get_user_meta( $temp_term->meta_user_id, 'last_name', true );
                $first_name = get_user_meta( $temp_term->meta_user_id, 'first_name', true );
                // overwrite the original label
                if ( $last_name && $first_name ) {
                    $option->label = $last_name . ', ' . $first_name;
                }
            }
        }
    	
    	return $input_object;
    }
    add_filter('sf_input_object_pre', 'sf_edit_author_field_order', 10, 2);
    #126699

    In reply to: Filter default values


    Anonymous
    Inactive

    Thanks for the link.

    I fixed it the following way:

    function filter_function_name($input_object, $sfid) {
      if($input_object['name']=='xxx') {
        $input_object['defaults'] = array("yyy");
      }
      return $input_object;
    }
    add_filter('sf_input_object_pre', 'filter_function_name', 10, 2);
    #114750

    Anonymous
    Inactive

    Hi,

    I need to apply a category filter onload rather than showing all categories. I’ve used the below code to set the default to ‘news’ and removed the all option. But it still loads all the posts rather than just the news post on load.

    add_filter(‘sf_input_object_pre’, function ($input_object, $sfid)
    {
    if(($input_object[‘name’]!=’_sft_category’))
    {
    return $input_object;
    }
    $input_object[‘defaults’] = array(“news”);
    array_shift($input_object[‘options’]);
    return $input_object;
    } , 10, 2);

    #105123

    Ross
    Keymaster

    Hi Javier

    You can do this with the current version..

    Take a look at the docs here:

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

    Nearly any value in any input object can be changed if you dig deep enough into the $input_object there are all kinds of things that can be changed.

    Tested locally, and updated to match your field name _sfm_precio, this should do the trick:

    function filter_range_dropdown($input_object, $sfid)
    {
    	
    	if($input_object['name']=='_sfm_precio')
    	{
    		//udpate this field before rendering
    		//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;
    		}
    		
    		//now loop through the options in the field
    		foreach($input_object['options'] as $option)
    		{
    			//update every label, and prefix and suffix with $
    			$option->label = "$ ".$option->label." $";
    		}		
    	}
    
    	//always return the input object, even if we made no changes
    	return $input_object;
    }
    add_filter('sf_input_object_pre', 'filter_range_dropdown', 10, 2);

    Hope that helps

    #85783

    Anonymous
    Inactive

    I tried using CSS, unfortunately Macs/ Safari refuse to honor display:none;

    Regarding the code
    // add indent to dropdown

    function filter_function_name($input_object, $sfid87) //I cant change it to just 87 as its expecting a variable
    {
    if($input_object[‘name’]==’_my_field_name’) // this should be the class name?
    {
    //udpate this field before rendering
    $input_object = ”  “. $input_object;
    }

    return $input_object;
    }
    add_filter(‘sf_input_object_pre’, ‘filter_function_name’, 10, 2); // what is 10,2 is that something that I should be changing?

    Sorry to be such a bother.

    #83471

    Anonymous
    Inactive

    Thank you.

    My php isn’t that great, would it would be something like;

    function filter_function_name($input_object, $sfid=87)
    {
    if($input_object[‘name’]==’sf-level-1′)
    {
    //udpate this field before rendering
    $input_object[‘attributes’][‘style’] = ‘margin-left:50px;’;
    }

    return $input_object;
    }
    add_filter(‘sf_input_object_pre’, ‘filter_function_name’, 10, 2);

    #82378

    Anonymous
    Inactive

    All of a sudden the search forms have stopped sorting. The page is here: https://intrepidexposures.com/photo-tours/

    Tweaks to code as per previous threads here:

    // Search Filter
    function filter_input_object($input_object, $sfid) {
    	
    if(($input_object['name'] == '_sfm_workshop_location') || ($input_object['name'] == '_sfm_tour_style') || ($input_object['name'] == '_sfm_tour_leader')) {
    
    		
    		$new_options = array(); //the options added to this will replace all existing optoins in the field
    		
    		foreach($input_object['options'] as $option) {
    			
    			if ($option->value !== "")
    			{
    				//check to see if the option has a parent
    				$parent_id = wp_get_post_parent_id($option->value);
    				if(!$parent_id)
    				{
    					//then this option does not have a parent, so it must be a parent itself, add it to the new array
    					$option->label = get_the_title($option->value);
    					array_push($new_options, $option);
    				}
    			}
    		}
    		
    		//now we have an array with only parent options in, so simply replace the one in the input object
    		$input_object['options'] = $new_options;
    		
    	}
    	
    	return $input_object;
    }
    add_filter('sf_input_object_pre', 'filter_input_object', 10, 2);

    Any ideas?

Viewing 10 results - 81 through 90 (of 106 total)