Forums Forums Search Search Results for 'sf_input_object_pre label option'

Viewing 10 results - 51 through 60 (of 60 total)
  • Author
    Search Results
  • #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);
    #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

    #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?

    #50568

    Anonymous
    Inactive

    Hey Davide!

    Sorry for the delay – hectic couple of weeks.

    Try this:

    // Relabel Co-Authors in Search & Filter
    
    	function filter_function_name($input_object, $sfid) {
    
    		if ($input_object['name'] == '_sft_author') {
    
    			global $coauthors_plus;
    			
    			// Update option labels before rendering
    
    				foreach($input_object['options'] as $key => $option) {
    
    					// Rename "all items" label - this is always the option with no value
    
    					if($option->value=="") {
    
    							$option->label = "All Authors";
    
    						}
    
    					else {
    
    						$user = $coauthors_plus->get_coauthor_by( 'user_nicename', $option->value );
    
    						$input_object['options'][$key]->label = $user->last_name . ', ' . $user->first_name . ' ' . ' (' . $option->count . ')';
    
    	    			}
    
    	        	}
    
    	        	$sortArray = array(); 
    
    	        	foreach($input_object['options'] as $option) { 
    
    				    foreach($option as $key => $value) { 
    
    				        if(!isset($sortArray[$key])) { 
    
    				            $sortArray[$key] = array(); 
    
    				        } 
    
    				        $sortArray[$key][] = $value; 
    
    				    }
    
    				}
    
    	        	$orderby = "label";
    
    				array_multisort($sortArray[$orderby],SORT_ASC,$input_object['options']); 
    
    		}
    		
    		// Return
    
    			return $input_object;
    
    	}
    
    	add_filter('sf_input_object_pre', 'filter_function_name', 10, 2);
    #49503

    Anonymous
    Inactive

    Thanks, Ross! 🙂

    Sorry, Davide! I haven’t had a chance to look at this yet. Work got kinda busy. Bleurrrrgh!

    As far as putting the last name first bit goes, that’s easy. All you have to do is change display_name to a combination of last_name, first_name. The code would look something like this:

    // Relabel Co-Authors in Search & Filter
    
    	function filter_function_name($input_object, $sfid) {
    
    		if ($input_object['name'] == '_sft_author') {
    
    			global $coauthors_plus;
    			
    			// Update option labels before rendering
    
    				foreach($input_object['options'] as $key => $option) {
    
    					// Rename "all items" label - this is always the option with no value
    
    					if($option->value=="") {
    
    							$option->label = "All Authors";
    
    						}
    
    					else {
    
    						$user = $coauthors_plus->get_coauthor_by( 'user_nicename', $option->value );
    
    						$input_object['options'][$key]->label = $user->last_name . ', ' . $user->first_name . ' ' . ' (' . $option->count . ')';
    
    	    			}
    
    	        	}
    
    		}
    		
    		return $input_object;
    
    	}
    
    	add_filter('sf_input_object_pre', 'filter_function_name', 10, 2);

    As for sorting, I think Ross is right and that the best way to go about it is using one of the standard PHP sorts.

    I’ll have a look at doing that in the next couple of days. Would be a useful one to figure out! 🙂

    #48864

    Anonymous
    Inactive

    Done!

    Added back the “All Authors” title and my post count. Final code:

    // Trial by fire
    
    function filter_function_name($input_object, $sfid) {
    
    	if ($input_object['name'] == '_sft_author') {
    
    		global $coauthors_plus;
    		
    		//udpate this field before rendering
    
    			foreach($input_object['options'] as $key => $option) {
    
    				if($option->value=="")
    					{//the option with no value is always the "all items" or unselected state
    						$option->label = "All Authors";
    					}
    
    				else {
    
    				$user = $coauthors_plus->get_coauthor_by( 'user_nicename', $option->value );
    
        			$input_object['options'][$key]->label = $user->display_name . ' (' . $option->count . ')';
    
        			}
    
            	}
    
    	}
    	
    	return $input_object;
    
    }
    
    add_filter('sf_input_object_pre', 'filter_function_name', 10, 2);
    #48863

    Anonymous
    Inactive

    GOT IT!

    Just trying to figure out why my “All authors” label is now missing, but the names are showing up properly! Was just missing the “->value” after the $option above:

    function filter_function_name($input_object, $sfid) {
    
    	if ($input_object['name'] == '_sft_author') {
    
    		global $coauthors_plus;
    		
    		//udpate this field before rendering
    
    			foreach($input_object['options'] as $key => $option) {
    
    				$user = $coauthors_plus->get_coauthor_by( 'user_nicename', $option->value );
    
        			$input_object['options'][$key]->label = $user->display_name;
    
            	}
    
    	}
    	
    	return $input_object;
    
    }
    
    add_filter('sf_input_object_pre', 'filter_function_name', 10, 2);

    Will post back in a few with final code, once I’ve figured out where my main label has gone!

    #48858

    Anonymous
    Inactive

    Whoops! Nope, being an idiot. Ignore what I said about input taxonomy. That was a load of old hogswash. Would help if slowed down for a second to realise just how the filter (and the plugin) worked!

    Getting closer:

    function filter_function_name($input_object, $sfid) {
    
    	if ($input_object['name'] == '_sft_author') {
    
    		global $coauthors_plus;
    		
    		//udpate this field before rendering
    
    			foreach($input_object['options'] as $key => $option) {
    
    				$user = $coauthors_plus->get_coauthor_by( 'user_nicename', $option );
    
        			$input_object['options'][$key]->label = $user->display_name;
    
            	}
    
    	}
    	
    	return $input_object;
    
    }
    
    add_filter('sf_input_object_pre', 'filter_function_name', 10, 2);
    #40004

    Anonymous
    Inactive

    Perfect,

    I’ve done it… it works great. Thank you!

    For someone curious about how to implement this, on your plugin php add the following function:

    function my_plugin_search_filter_change_label($input_object, $sfid) {
      if ($sfid == 12345 && $input_object['name'] == '_sf_post_type') {
        foreach ($input_object['options'] as $key => $option) {
          if ($option->label == 'Media') {
            $input_object['options'][$key]->label = 'Photos';
          }
        }
      }
      return $input_object;
    }
    add_filter('sf_input_object_pre', 'my_plugin_search_filter_change_label', 10, 2);

    Hope it helps.

    #34366

    Ross
    Keymaster

    Hi Jacob sorry for the delay.

    You’re almost there.

    First, you have only 1 = in the first if statement.

    So it does the code for every single field – this needs to be changed to a double ==

    Second, I think likely you got the fieldname wrong – see here on how to get the correct fieldname:

    http://www.designsandcode.com/documentation/search-filter-pro/accessing-search-data/#How_to_get_the_field_name

    Here is your code updated (and I’m guessing the field name is from meta data, otherwise you need to find the name as link just above:

    <?php
    function filter_input_object($input_object, $sfid) {
    	
    	if(($input_object['name'] == '_sfm_workshop_location')) {
    		
    		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);
    
    ?>

    Thanks

Viewing 10 results - 51 through 60 (of 60 total)