Forums Forums Search & Filter Pro Custom query on AJAX loads

Viewing 6 posts - 1 through 6 (of 6 total)
  • Anonymous
    #171757

    Hi!

    First off, great plugin!
    I have a question regarding the AJAX query calls. So, my results page has an option to filter posts based on authors. Every post has the option (checkbox through ACF plugin) for anonymous author (meta field – boolean). When a user lands on the unfiltered results page I would like to show all the posts (regardless of the anonymous meta field), but once a user filters based on particular author, I would like the results page not to show posts that have the meta field for anonymous author set. Is that possible?

    I’ve been trying to filter results with sf_edit_query_args filter, but as far as I understand that only works on page reload (and doesn’t get called when an AJAX call is made).

    Thank you for your answer!
    Domen

    Trevor
    #171848

    Can I ask a few questions (as I have an idea)?

    Does the anonymous author appear in the author field?
    Do you have a fixed set of authors?
    Do you have Author archives pages?

    Anonymous
    #171866

    Sure 🙂

    1. Yes. All the authors are listed in the dropdown (independent of their blog posting anonymity). If the user chooses an author that only has anonymous posts, then the results should be empty. If the user chooses an author that has 3 posts published and one of them has them set as an anonymous author, then the results should show only 2 posts.
    2. No, the authors are going to be added and removed.
    3. Yes, I have it. But I modified the query to show only posts that don’t have the anonymous meta field set:

    function d_pre_get_posts( $query ){
    if (is_author()) {
    set_query_var( ‘meta_key’, ‘anonimni_avtor’ );
    set_query_var( ‘meta_value’, 1 );
    set_query_var( ‘meta_compare’, ‘!=’ );
    }
    }
    add_action( ‘pre_get_posts’, __NAMESPACE__ . ‘\\d_pre_get_posts’ );

    Anonymous
    #171871
    This reply has been marked as private.
    Ross Moderator
    #171898

    Hi Domen

    It looks like the problem is your usage of sf_edit_query_args

    The reason for the filter, is so that it works effectively for all our queries and ajax.

    One of the issues I see with your code is actually with this line:

    if (is_author()) {

    A typical ajax request will be performed at wp-admin/admin-ajax.php, the function is_author will always return false, this is applicable when using our filter sf_edit_query_args and your display method is set to shortcode

    I added an extra line in our example to show how to set query arg properties using our function – https://www.designsandcode.com/documentation/search-filter-pro/action-filter-reference/#Edit_Query_Arguments

    If you wanted is_author to work correctly, you would need to use the display method archive where our ajax requests are loaded from the same page.

    Hope that makes sense

    Thanks

    Anonymous
    #178610

    Hi,

    thank you Ross for your answer. The project was kind of on hold for a while, so I’m only replying now.
    I’ve played a bit with sf_edit_query_args and got it working.
    So my setting was as follows:

    I have a home.php template set up, containing:

     <?php echo do_shortcode('[searchandfilter id="' . BLOG_FILTER . '"]'); ?>
            <?php echo do_shortcode('[searchandfilter id="' . BLOG_FILTER . '" show="results"]'); ?>

    I also have a page named Blog that is set up as the Posts Page on /wp-admin/options-reading.php

    In backend I have a filter whose Display settings are:

    Display results method: Using a Shortcode
    Results URL: http://website.com/blog
    Load results using Ajax? Checked
    Make searches bookmarkable? Checked

    I then have a filter (usually put in functions.php):

    /**
     * Modify Search & Filter PRO plugin's query so that it returns posts of authors that are not anonymous.
     */
    function domain_sf_filter_query_args($query_args, $sfid)
    {
        if ($sfid == 95 && isset($_GET['authors'])) {
            $query_args['meta_key'] = 'anonimni_avtor';
            $query_args['meta_value'] = 1;
            $query_args['meta_compare'] = '!=';
        }
        return $query_args;
    }
    add_filter('sf_edit_query_args', 'domain_sf_filter_query_args', 10, 2);

    So, when visiting an unfiltered page it returns all posts, but when filtering through authors, it returns only posts from that author that are not marked as anonymous author.

    Thank you all for your help 🙂

    Have a great start of next week!

    Domen

Viewing 6 posts - 1 through 6 (of 6 total)