Frontend Search Settings: Any post type

Home Forums Product Support Forums Ajax Search Pro for WordPress Support Frontend Search Settings: Any post type

This topic contains 7 replies, has 2 voices, and was last updated by

 
Keymaster
12 months ago.

Viewing 8 posts - 1 through 8 (of 8 total)
  • Author
    Posts
  • #31272

    Participant

    Dear support,

    is there any way to use an “Any” field in Frontend Search Settings for Post type?

    The customer wants the form to have these filters:
    Any post type (Post type 1, Post type 2, Post type 3 … Post type n) | Post type 1 | Post type 2

    How it should work
    1. If Any post type is checked, it should search in any post type that is setup in sources (including Post type 1 and 2).
    2. the Post type 1 and 2 should not be checked if Any is checked

    A temporary workaround might be to simply display all as checkboxes, relabel “Select all” as Any, but:
    1. you have to bind events to checkboxes to deselect them if Post type 1 or Post type 2 will be selected
    2. you have to hide things with CSS
    3. clicking any deselects all

    Is there any other way to do this?

    Best regards

    #31279

    Hi,

    If I understand correctly, you want to divide the post type selectors to multiple sections, and some options (post type 1 and post type 2) should work sort of independently from the “Any” selector?
    While there is an Select All/Any option integrated with the post type selectors, this is not possible without custom coding for sure. I’m afraid there is no other way of doing this.

    Best,
    Ernest Marcinko

    If you like my products, don't forget to rate them on codecanyon :)


    #31287

    Participant

    Hello,

    ok, that’s unfortunate.

    One of the ideas was also changing options to radio buttons and adding a filter to asp_pre_get_front_filters with:

    array(
                    'field' => 'cpt',
                    'value' => 'any', // or '', or 'post_type1,post_type2,post_type3'
                    'label' => 'Any',
                    'default' => true,
                   'selected' => true
    )

    But none of this is recognized and it just fallbacks to “post”. Is there anything else we can try in the value field, or it just allows single value with one of the post_types selected in source?

    Best regards

    #31290

    In theory, maybe by adding “fake” filters to the front-end with any labels you choose, then processing them during the query arguments filter could actually work.

    So for example:

    add_filter('asp_pre_get_front_filters', 'asp_add_a_filter', 10, 2);
    function asp_add_a_filter($filters, $type) {
      foreach ($filters as $k => &$filter) {    
    	if ( $filter->type() == 'post_type' ) {
               $filter->add(array(
                   'label' => 'My Post Type',
                   'selected' => false,
                   'value' => 'my_post_type'
               ));
    	}
      }
      return $filters;
    }

    This should add an additional filter to a post type filter with a label “My post Type” and value “my_post_type”. When this is selected, it is passed to the query arguments.

    add_filter("asp_query_args", "asp_query_args_change", 10, 2);
    function asp_query_args_change($args, $search_id) {
      // The my_post_type was selected
      if ( in_array('my_post_type', $args['post_type']) ) {
    	$args['post_type'] = array('post', 'page', 'other_post_type');
      }
      return $args;
    }

    This then detects if the ‘my_post_type’ was selected, and changes the post type arguments to whatever you need.

    In theory this should work, but I honestly don’t recall if there is any existence check before or after the query arguments for post types – in which case this can be an issue, and probably will not work.

    Best,
    Ernest Marcinko

    If you like my products, don't forget to rate them on codecanyon :)


    #31300

    Participant

    Hello,

    thanks! This works perfectly.

    While trying to set a position for this item, we have discovered a possible bug. If you set position parameter to anything, it will throw an Warning:

    Warning: array_splice() expects parameter 1 to be array, null given in /ajax-search-pro/includes/classes/frontend/filters/class-asp-filter.php on line 64

    $original is NULL

    This issue is present in 4.20.3

    Best regards

    #31304

    Hi,

    Thank you for that, I will correct that in the next release. We are about to release it today fixing some other issues with 4.20.3, feel free let me know if the issue persists in 4.20.4 once it’s released.

    Best,
    Ernest Marcinko

    If you like my products, don't forget to rate them on codecanyon :)


    #31306

    Participant

    Hello,

    installed, but it doesn’t correctly splice the values. The code should probably be:

    array_splice( $this->values, $position, 0, array($new) );

    If the last value is not an array it is typecasted to one which means that the structure is not preserved.

    Here is one last question about the original problem: is it possible to also override parameters for the search page results? Ajax load works great, but on search page the above filter seems to be ignored.

    Best regards

    #31309

    Thanks, I will rewrite the unit tests on that, somehow it slipped through even with typecasting correctly.

    If you mean when clicking the magnifier or hitting the return button to redirect to the results page, then make sure the search override feature is enabled.

    Best,
    Ernest Marcinko

    If you like my products, don't forget to rate them on codecanyon :)


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

You must be logged in to reply to this topic.