Support » Plugin: WP Job Manager » pass argument to job listing query

  • Resolved jeeltcraft

    (@jeeltcraft)


    I’d like to pass some filter to the listing query, but I can’t get my function to work with the “job_manager_get_listing” hook, this is my code:

    function filter_hide( $query_args ) {
    
    	$meta = get_user_meta(get_current_user_id(), 'hide', true);
    		
    	if(!is_admin() )
    	{
    		$args = array(
        			'author__not_in' => $meta,
    		);
    	}
    	
    	return $query_args;
    
    }
    add_action( 'pre_get_posts', 'filter_hide', 10, 2 );
    add_action('job_manager_get_listings', 'filter_hide');

    The id of authors to hide is stored in a user meta array with single key and multiple values.
    The “author__not_in” value is standard on the wp_query arguments
    Please let me know

    • This topic was modified 7 months, 3 weeks ago by  jeeltcraft.
Viewing 9 replies - 1 through 9 (of 9 total)
  • Please let me know at least the name of the hook to filter listings… I really need that.

    Ok, just found the error in variables, but still cannot get this to work properly:

    function filter_hide( $query_args ) {
    
    	$meta = get_user_meta(get_current_user_id(), 'hide', true);
    		
    	if(!is_admin() )
    	{
    		$query_args = array(
        			'author__not_in' => $meta,
    		);
    	}
    	
    	return $query_args;
    
    }
    add_action( 'pre_get_posts', 'filter_hide', 10, 2 );
    add_action('job_manager_get_listings', 'filter_hide');

    ‘author__not_in’ seems to expect an array. $meta does not seem like it would return an array, because the value for unique is set to true vs. false. Try changing that to false and see what happens there. I could be wrong, but I think that might be the issue (that an array is not being used).

    Hi Jon, the $meta value is an array of values with a single key, so the true to unique is correct (tested on another wp_query), thanks anyways for your interest, and let me know if you wanna get deep into it by applying for a freelance work.
    Regards,
    LauraC

    I think $meta is not an array.
    https://codex.wordpress.org/Function_Reference/get_user_meta

    Return Values
    (mixed)
    Will be an Array if $key is not specified or if $single is false. Will be value of meta_value field if $single is true.
    NOTE
    If the meta value does not exist and $single is true the function will return an empty string. If $single is false an empty array is returned.

    So in this case it is a just a value. not an array.

    That’s what I thought. In the past, when I’ve had an issue similar to this, it was because the true setting causes a string to be returned as opposed to an array. I’ve also had problems where the reverse was the case, where I needed a string, but was getting an array…and setting it to “true” resolved the problem (it then returned a string).

    Ok, Just to explain myself better, the function itself works with that filter, but it overwrites the entire job listing query, which is not what I want, what I want is to add ‘author__not_in’ parameter to the existing search query.

    The code for the search query is here and it uses wp_parse_args() here the codex reference

    Anyone is familiar with that function?

    Replace with this

    $query_args = array_merge( $query_args, array( ‘author__not_in’ => $meta ) );

    function filter_hide( $query_args ) {
    
    	$meta = get_user_meta(get_current_user_id(), 'hide', true);
    		
    	if(!is_admin() )
    	{
    		$query_args = array_merge( $query_args, array( 'author__not_in' => $meta ) );
    	}
    	
    	return $query_args;
    
    }
    add_action( 'pre_get_posts', 'filter_hide', 10, 2 );
    add_action('job_manager_get_listings', 'filter_hide');

    Hope it will work for you.

    Works great!!!

    Thanks a lot to you and to your wp job manager facebook community!!!!

Viewing 9 replies - 1 through 9 (of 9 total)
  • The topic ‘pass argument to job listing query’ is closed to new replies.