Forums Forums Search Search Results for 'orderby sf_edit_query_args'

Viewing 10 results - 1 through 10 (of 29 total)
  • Author
    Search Results
  • #276863

    Anonymous
    Inactive

    Howdy Trevor!

    Instead of a range date picker, we’re gonna go with only one date picker.

    The thing is we need to query from that date in advance, so we did with this code.

    function filter_query_args( $query_args, $sfid ) {
    
    	// Trainings Form ID.
    	if( 1788 === $sfid && ! empty( $_GET['_sfm_start_date'] ) ) {
    		$year  = substr( $_GET['_sfm_start_date'], 4, 4 );
    		$month = substr( $_GET['_sfm_start_date'], 2, 2 );
    		$day   = substr( $_GET['_sfm_start_date'], 0, 2 );
    		$fdate = $year . $month . $day;
    
    		$query_args['posts_per_page'] = -1;
    		$query_args['orderby']      = 'meta_value_num';
    		$query_args['meta_key']     = 'start_date';
    		$query_args['meta_value']   = $fdate;
    		$query_args['meta_compare'] = '>=';
    		$query_args['meta_query']   = [[
    			'key'     => 'start_date',
    			'value'   => $fdate,
    			'compare' => '>',
    		]];
    
    		/*$q = new WP_Query( $query_args );
    
    		print '<pre><br><br>';
    			//print $fdate . '<br>';
    			print count( $q->posts ) . '<br>';
    			//print_r( $query_args );
    			//print_r( new WP_Query( $query_args ) );
    
    			foreach( $q->posts as $p )
    				print get_post_meta( $p->ID, 'start_date', true )
    					. ' : ' . $p->post_title . '<br>';
    		print '</pre>';*/
    	}
    
    	return $query_args;
    
    }
    add_filter( 'sf_edit_query_args', 'filter_query_args', 99, 2 );

    We’ve modified the query correctly, or that says the debug (as you can see commented in the code). The data is there, but somehow the results are not showing.

    Any hints? Thanks in advance.

    #275584

    Anonymous
    Inactive

    Sure. So I want the results here to display the same as the taxonomy archive page.

    Here is the pre_get_post that results in the taxonomy archive page.

    // Order posts first by event and date, then by other kinds of content  
    function order_events_by_event_date($query=false) {
        
        // only used on main query on front end of site
        if (is_admin() || !$query  ||
            !$query->is_main_query()) {
            return;
        }
        
    
        // modfiy a custom post type to show and order by meta value
        if (is_tax() || is_archive() ) {
            $query->set('orderby', array( 'meta_value' => 'DESC' ) );
            $query->set('order', 'ASC');
            $query->set('posts_per_page', -1);
    
            $meta_query = array(
                'relation' => 'OR',
                    array(
                        'key'     => 'expired',
                        'compare' => 'NOT EXISTS',
                    ),
                    array(
                        'relation' => 'OR',
                        array(
                            'key'   => 'expired',
                            'value' => '0',
                        ),
                        array(
                            'key'     => 'expired',
                            'value'   => '1',
                            'compare' => '!=',
                        ),
                    ),
                );
        
                
            $query->set('meta_query', $meta_query);
            
        }
    } // end function blunt_pre_get_posts
    add_action('pre_get_posts', 'order_events_by_event_date');
    

    The nested array is necessary to include the “experiences” post type (first OR) and the array beneath it includes items that are not expired or field expired is empty.

    I changed it using the code you provided above, removing the is_tax and first qualifiers about queries, and got the results posted above.

    Only thing that seems to semi-sort the results is the sfid filter, so what is displaying results now is

    function exclude_expired_results ( $query_args, $sfid ) {
        
        //if search form ID = 3988, the do something with this query
        if($sfid==3988)
        {
            //modify $query_args here before returning it
           
            $query_args['meta_query'] = array(
                'orderby' => array( 'meta_value' => 'DESC' ),
                'order' => 'ASC',
                'meta_query' => array(
                     'relation' => 'OR',
                    array(
                        'key'     => 'expired',
                        'compare' => 'NOT EXISTS',
                    ),
                    array(
                        'relation' => 'OR',
                        array(
                            'key'   => 'expired',
                            'value' => '0',
                        ),
                        array(
                            'key'     => 'expired',
                            'value'   => '1',
                            'compare' => '!=',
                        ),
                    ),
                ),
                    ); // end meta_query addtion to arg
            }
            
        return $query_args;
    }
    add_filter( 'sf_edit_query_args', 'exclude_expired_results', 20, 2 );  

    sfid is 3988. Thank you for any help.

    #259361

    Trevor
    Participant

    Ordering is (normally) handled within our plugin, so any query arguments you set for ordering may be ignored/overridden. Instead, you would need to add them using this filter:

    https://searchandfilter.com/documentation/action-filter-reference/#edit-query-arguments

    I am not sure if that would work, but this forum search should yield some code snippets:

    https://support.searchandfilter.com/forums/search/orderby+function+sf_edit_query_args/

    #257057

    Anonymous
    Inactive

    <?php
    if ( ! defined( ‘ABSPATH’ ) ) { exit; }

    if ( ! isset( $content_width ) ) $content_width = 1280;

    function skelementor_init() {

    add_theme_support( ‘title-tag’ );
    add_theme_support( ‘post-thumbnails’ );
    add_theme_support( ‘automatic-feed-links’ );
    add_theme_support( ‘title-tag’ );
    add_theme_support( ‘html5’, array( ‘search-form’, ‘comment-form’, ‘comment-list’, ‘gallery’, ‘caption’ ) );
    add_theme_support( ‘custom-logo’, array(
    ‘width’ => 260,
    ‘height’ => 100,
    ‘flex-height’ => true,
    ‘flex-width’ => true,
    ) );
    add_theme_support( ‘custom-header’ );
    add_theme_support( ‘woocommerce’ );
    add_post_type_support( ‘page’, ‘excerpt’ );

    register_nav_menus(
    array( ‘main-menu’ => __( ‘Main Menu’, ‘skelementor’ ) )
    );

    load_theme_textdomain( ‘skelementor’, get_template_directory() . ‘/languages’ );
    }
    add_action( ‘after_setup_theme’, ‘skelementor_init’ );

    function skelementor_comment_reply() {
    if ( get_option( ‘thread_comments’ ) ) { wp_enqueue_script( ‘comment-reply’ ); }
    }
    add_action( ‘comment_form_before’, ‘skelementor_comment_reply’ );

    function skelementor_scripts_styles() {
    wp_enqueue_style( ‘skelementor-style’, get_stylesheet_uri() );
    }
    add_action( ‘wp_enqueue_scripts’, ‘skelementor_scripts_styles’ );

    function skelementor_register_elementor_locations( $elementor_theme_manager ) {
    $elementor_theme_manager->register_all_core_location();
    };
    add_action( ‘elementor/theme/register_locations’, ‘skelementor_register_elementor_locations’ );

    function price_range_on_save( $post_id ) {
    $post_type = ‘share’; //custom post type for events

    //Check if we are saving correct post type
    if( get_post_type( $post_id ) != $post_type)
    return;

    //Check it’s not an auto save routine
    if( defined(‘DOING_AUTOSAVE’) && DOING_AUTOSAVE )
    return;

    // get the price of the post. This assumes that the price is a number and has no currency symbol or thousands separator
    $post_price = get_post_field (‘price’, $post_id);
    // set an empty default string
    $post_price_text = “”;
    // set the price text label to match the price
    if ($post_price) {
    switch($post_price) {
    case ( $post_price <= 100 ):
    $post_price_text = “0-100 kr”;
    break;
    case ( ($post_price > 100) && ($post_price <= 250) ):
    $post_price_text = “101-250 kr”;
    break;
    default:
    $post_price_text = “250 kr and up”;
    }
    }

    // update the price choice
    update_field( ‘post_price_text’, $post_price_text );
    }
    add_action(‘save_post’, ‘price_range_on_save’);

    /////////
    $roots_includes = array(
    ‘lib/extras.php’,
    ‘lib/scripts.php’,
    ‘lib/ajax.php’,
    ‘lib/post-types.php’,
    ‘lib/init.php’,
    ‘lib/utilities.php’,
    ‘lib/acf.php’,
    // ‘lib/custom-fields.php’,
    // ‘lib/custom-fields/category.php’,
    // ‘lib/custom-fields/footer.php’,
    // ‘lib/custom-fields/post.php’,
    );

    foreach ($roots_includes as $file) {
    if (!$filepath = locate_template($file)) {
    trigger_error(sprintf(__(‘Error locating %s for inclusion’, ‘roots’), $file), E_USER_ERROR);
    }

    require_once $filepath;
    }
    unset($file, $filepath);

    // CUSTOM FILTER // Add author of the current post (SPELTIPS)
    add_action( ‘elementor/query/from_same-author’, function( $query ) {
    // The author of the current post
    $author_id = get_the_author_meta(‘ID’);
    $query->set( ‘author’, $author_id );
    } );

    // CUSTOM FILTER // Add Speltips from same expert on EXPERT page
    add_action( ‘elementor/query/spel-from-same-expert’, function( $query ) {
    // The author of the current post

    $author_id = get_field( ‘wp_authors’ );

    $query->set( ‘author’, $author_id );
    } );

    add_action( ‘elementor/query/shares-from-current_author’, function( $query ) {
    // The author of the current post

    $author_id = get_the_author_meta(‘ID’);

    $expert_id = get_field( ‘expert’, ‘user_’ . $author_id );

    if( is_array( $expert_id ) ) $expert_id = $expert_id[ ‘ID’ ];

    $meta_query = $query->get( ‘meta_query’ );

    if( ! is_array( $meta_query ) ) $meta_query = [];

    $meta_query[ ‘expert_id’ ] = [
    ‘key’ => ‘expert’,
    ‘compare’ => ‘==’,
    ‘value’ => $expert_id,
    ];

    $query->set( ‘meta_query’, $meta_query );
    } );

    // CUSTOM FILTER // Add ANDELAR (SHARES) from same expert on EXPERT page
    add_action( ‘elementor/query/andelar-from-same-expert’, function( $query ) {
    // The author of the current post
    $expert_id = get_the_ID();
    $meta_query = $query->get( ‘meta_query’ );

    if( ! is_array( $meta_query ) ) $meta_query = [];

    $meta_query[ ‘expert_id’ ] = [
    ‘key’ => ‘expert’,
    ‘compare’ => ‘==’,
    ‘value’ => $expert_id,
    ];

    $query->set( ‘meta_query’, $meta_query );
    } );

    // Add Options Page
    function add_my_options_page() {
    if( function_exists(‘acf_add_options_page’) ) {
    acf_add_options_page();
    }
    }
    add_action( ‘plugins_loaded’, ‘add_my_options_page’ );

    // Don’t put anything except includes in this file
    //Pick a place for your jsons to live. We stick them into the /theme/includes/acf-json folder, but you can stick these wherever

    // change where acf json files are saved
    add_filter(‘acf/settings/save_json’, ‘jb_acf_save_json’);
    function jb_acf_save_json($path) { return get_stylesheet_directory().’/includes/acf-json’; }

    // add our custom folder to places acf json are loaded from
    add_filter(‘acf/settings/load_json’, ‘jb_acf_load_json’);
    function jb_acf_load_json($paths) { return array_merge($paths, array(get_stylesheet_directory().’/includes/acf-json’)); }

    function custom_theme_slug_filter_the_content( $content ) {
    global $wpdb;
    if(“post” == get_post_type()){
    //if(is_singular(‘posts’)){
    $requested_post_id = get_the_ID();
    $authordetails = get_field(‘acfe_author’, $requested_post_id);
    $suthorname = $authordetails[‘display_name’];
    $expert_args = array(
    ‘post_type’ => ‘expert’,
    ‘post_status’ => ‘publish’,
    ‘title’ => trim($suthorname),
    ‘orderby’ => ‘date’,
    ‘order’ => ‘DESC’
    );
    $query = new WP_Query($expert_args);
    $postid = $query->post->ID;
    $image = wp_get_attachment_image_src( get_post_thumbnail_id( $postid ), ‘full’ );
    $custom_content = ‘<div id=”ctm-img-box” class=”custom-img-box”><span class=”elementor-icon-list-icon”></span><span class=”authorname”>’.$suthorname.'</span></div>’;
    $custom_content .= $content;
    //return $custom_content;
    }else{
    $custom_content = $content;
    }
    return $custom_content;
    }
    add_filter( ‘the_content’, ‘custom_theme_slug_filter_the_content’, 1);

    function wpa_choose_ad($user_id, $expert_id) {
    $requested_post_id = get_the_ID();
    $expert_user = get_field(‘wp_authors’, $requested_post_id);
    //echo $user_id;
    $args = array(
    ‘post_type’ => ‘share’,
    ‘posts_per_page’ => 12,
    ‘orderby’ => ‘rand’,
    ‘meta_query’ => array(
    array(
    ‘key’ => ‘expert’,
    ‘value’ => $expert_id,
    ‘compare’ => “=”
    )
    )
    );
    $the_query = new WP_Query( $args );
    //echo “

    ";
        //print_r($the_query);
        $the_ad = '<div class="elementor-container elementor-column-gap-no">';
        	$the_ad .= '<div class="element-row">';
        	$the_ad .= '<div class="elementor-widget-container elementor-widget-heading"><h4 class="elementor-heading-title elementor-size-default">MINA ANDELAR</h4></div>';
        $the_ad .= '<div class="elementor-widget-container">';	
        $the_ad .= '<div class="ecs-posts elementor-posts-container elementor-posts elementor-grid elementor-posts--skin-custom">';
        if ( $the_query->have_posts() ) {
        while ( $the_query->have_posts() ) : $the_query->the_post();
        		$title = get_the_title();
        		$url = get_permalink(get_the_ID());
    			$expert_type = get_field('type', get_the_ID());
    			$expert_shares = get_field('shares', get_the_ID());
    			$expert_price = get_field('price', get_the_ID());
    
    		$the_ad .= '<div class="share_outer_box">';
    		$the_ad .= '<div class="share_price_details">';
    		$the_ad .= '<p>'.$expert_type.'</p>';
    		$the_ad .= '<p>'.$expert_shares.' andler | '.$expert_price.' SEK</p>';
    		$the_ad .= '</div>';
    		$the_ad .= '<h2 class="custom-title elementor-heading-title elementor-size-default">'.$title.'</h2>';
    				   	
    		$the_ad .= '</div>';
        endwhile;
        }
        $the_ad .= '</div>';
        $the_ad .= '</div>';
        $the_ad .= '</div>';
        $the_ad .= '</div>';
        wp_reset_postdata();
    
        return $the_ad;
    }
    
    function filter_function_name( $query_args, $sfid ) {
    	
    	//if search form ID = 19856, the do something with this query
    	if($sfid==19856)
    	{
    		//modify $query_args here before returning it
    		// args
    			$args = array(
    				'post_type'		=> 'shares',
    				'meta_query'	=> array(
    				'relation'		=> 'OR',
    			array(
    			'key'		=> 'type',
    			'value'		=> 'Europatipset',
    			'compare'	=> 'LIKE'
    			),
    			array(
    			'key'		=> 'type',
    			'value'		=> 'Stryktipset',
    			'compare'	=> 'LIKE'
    			)
    	)
    );
    	}
    	
    	return $query_args;
    }
    add_filter( 'sf_edit_query_args', 'filter_function_name', 20, 2 );
    #242872

    In reply to: A third sort order?


    Anonymous
    Inactive

    Nevermind. I didn’t realize I had to also manually add the meta_query to get the search order to work. Here is my working code:

    function filter_function_name( $query_args, $sfid ) {
    	
    	//if search form ID = 225, the do something with this query
    	if($sfid==23142) {
    		
    	     $query_args["meta_query"] = array(
    	        'relation' => 'AND',
    	        'subject_code' => array(
                    'key'       => 'subject_code',
                    'compare'   => 'EXISTS',
                ),
                'course_number' => array(
                    'key'       => 'course_number',
                    'compare'   => 'EXISTS',
                ),
                'start_date' => array(
                    'key'       => 'start_date',
    		'compare'   => 'EXISTS',
                ),
    	    );
    	    
    		$query_args["orderby"] = array(
            	'subject_code'       => 'asc',
            	'course_number'       => 'asc',
            	'start_date'       => 'asc',
    		);				
    	}
    	
    	return $query_args;
    }
    add_filter( 'sf_edit_query_args', 'filter_function_name', 20, 2 );
    

    Please feel free to close this ticket. Thank you!

    #242855

    In reply to: A third sort order?


    Anonymous
    Inactive

    Thank you. I restored the Posts settings to the default order and used the following code, which is not affecting the sort order:

    
    function filter_function_name( $query_args, $sfid ) {
    	
    	if($sfid==23142) {
    	
    		$query_args["orderby"] = array(
            	'subject_code'       => 'asc',
            	'course_number'       => 'asc',
    			'start_date'     => 'asc',
    		);				
    	}
    	
    	return $query_args;
    }
    add_filter( 'sf_edit_query_args', 'filter_function_name', 20, 2 );

    It works if I set just a single order like so:

    
    function filter_function_name( $query_args, $sfid ) {
    	
    	if($sfid==23142) {
    	
    		$query_args["orderby"] = 'subject_code';		
    	}
    	
    	return $query_args;
    }
    add_filter( 'sf_edit_query_args', 'filter_function_name', 20, 2 );

    Do I need to format the $query_args differently? That’s how I do it in a regular WP_Query…

    Thank you!

    #242232

    Anonymous
    Inactive

    Hi there,
    we would like to add a reltion OR about two field.
    We can’t set it in admin panel so we try to integrate it by php.
    In function.php we add this:

    function filter_results( $query_args, $sfid ) {
    	if($sfid==3981) {
    	$query_args = array(
    	    "meta_query" => array(
                        'relation' => 'OR',
                        array(
                            'key' => 'immobile_disponibile',
                            'compare' => 'NOT EXISTS',
                        ),
                        array(
                            'key' => 'immobile_disponibile',
                            'value' => '1',
                            'compare' => 'NOT LIKE',
                        ),
                    ),
    		"meta_key" => "immobile_disponibile",
    		'orderby' => 'menu_order',
    		"order" => "ASC",
                 );	
    	}
    	return $query_args;
    }
    add_filter( 'sf_edit_query_args', 'filter_results', 20, 2 );

    But… not work.

    #236926

    In reply to: Order by 3 x fields


    Trevor
    Participant

    You would need to return the form order settings to default and instead use this filter:

    https://searchandfilter.com/documentation/action-filter-reference/#edit-query-arguments

    Adding an orderby argument to the query. This search may yield some snippets:

    https://support.searchandfilter.com/forums/search/orderby+sf_edit_query_args/

    #227761

    Anonymous
    Inactive

    Hi there,

    So I have a list of reference IDs (ACF Field for each post) in an array which I use in a meta_query to filter posts further after search and filter does its thing. This array contains post references in a specific order and the order I would like the posts to display.

    Here is the query I am using:

    ‘paged’ => int 1
    ‘search_filter_id’ => int 47
    ‘search_filter_override’ => boolean false
    ‘posts_per_page’ => int 10
    ‘post_status’ =>
    array (size=1)
    0 => string ‘publish’ (length=7)
    ‘meta_query’ =>
    array (size=1)
    0 =>
    array (size=3)
    ‘key’ => string ‘post_reference’ (length=13)
    ‘value’ => ARRAY OF POST REFS HERE
    ‘compare’ => string ‘IN’ (length=2)
    ‘post_type’ => string ‘custom_post’ (length=8)
    ‘orderby’ => string ‘meta_value’ (length=10)`

    Now obviously we can’t override post__in which would be ideal as I can pass an aray of post IDS rather than references, is there no way whatsoever we can do this?

    I tried to order by the meta_value which is the array of post refs, but it just orders them alphabetically rather than in the order they are in the given in the array.

    Can you think of a way I can work with SAFP to get this working correctly?

    Thanks

    #222024

    Anonymous
    Inactive

    Hello!

    I’m having some trouble editing the search query. I’m using the plugin alongside Relevanssi and want results to be sorted by relevance as well as post_date or modified date. I tried adding this to the functions file

    function filter_function_name( $query_args, $sfid ) {
    
    	//if search form ID = 225, the do something with this query
    	if($sfid==5671)
    	{
    		//modify $query_args here before returning it
    		$query_args['orderby'] = 'post_date';
    	}
    	return $query_args;
    }
    add_filter( 'sf_edit_query_args', 'filter_function_name', 20, 2 );

    But it doesn’t amend the search URL or results.

    Any help would be greatly appreciated!

Viewing 10 results - 1 through 10 (of 29 total)