Support

Account

Home Forums Front-end Issues Filter Checkbox error Warning: array_merge(): Argument #2 is not an array

Unread

Filter Checkbox error Warning: array_merge(): Argument #2 is not an array

  • Hey,

    I m trying to make filter. I have 2 fields “Genre” and “Profil”. I want to make query like your exemple here but nothing work and I have 2 problems.

    1) An error
    Warning: array_merge(): Argument #2 is not an array in C:\wamp64\www\wordpress\wp-content\plugins\advanced-custom-fields\core\api.php on line 264

    2) Filter doesnt work with any parameters…

    Can you help me please ?

    Functions.php

     $GLOBALS['my_query_filters'] = array(
     	'field_586c185ea61db' => 'genre',
      'field_597f67474b403' => 'profil'
     );
    
     // action
     add_action('pre_get_posts', 'filter_school_directory_pre_get_posts', 10, 1);
    
     function filter_school_directory_pre_get_posts( $query ) {
    
     	// bail early if is in admin
     	if( is_admin() ) {
    
     		return;
    
     	}
    
     	// get meta query
     	if ($query->is_main_query()){
       // get original meta query
       $meta_query = $query -> get('meta_query');
    
     	// loop over filters
     	foreach( $GLOBALS['my_query_filters'] as $key => $name ) {
    
     		// continue if not found in url
     		if( empty($_GET[ $name ]) ) {
    
     			continue;
    
     		}
    
     		// get the value for this filter
     		// eg: http://www.website.com/events?city=melbourne,sydney
     		$value = explode(',', $_GET[ $name ]);
    
     		// append meta query
         	$meta_query[] = array(
                 'key'		=> $name,
                 'value'		=> $value,
                 'compare'	=> 'IN',
             );
    
     	}
    
     	// update meta query
     	$query->set('meta_query', $meta_query);
    
     	}
     }
    

    category.php

    
    <div id="archive-filters">
    <?php foreach( $GLOBALS['my_query_filters'] as $key => $name ):
    
    	// get the field's settings without attempting to load a value
    	$field = get_field_object($key, false, false);
    
    	// set value if available
    	if( isset($_GET[ $name ]) ) {
    
    		$field['value'] = explode(',', $_GET[ $name ]);
    
    	}
    
    	// create filter
    	?>
    	<div class="filter" data-filter="<?php echo $name; ?>">
    		<?php create_field( $field ); ?>
    	</div>
    
    <?php endforeach; ?>
    </div>
    
    <script type="text/javascript">
    (function($) {
    
    	// change
    	$('#archive-filters').on('change', 'input[type="checkbox"]', function(){
    
    		// vars
    		var url = '';
    			args = {};
    
    		// loop over filters
    		$('#archive-filters .filter').each(function(){
    
    			// vars
    			var filter = $(this).data('filter'),
    				vals = [];
    
    			// find checked inputs
    			$(this).find('input:checked').each(function(){
    
    				vals.push( $(this).val() );
    
    			});
    
    			// append to args
    			args[ filter ] = vals.join(',');
    
    		});
    
    		// update url
    		url += '?';
    
    		// loop over args
    		$.each(args, function( name, value ){
    
    			url += name + '=' + value + '&';
    
    		});
    
    		// remove last &
    		url = url.slice(0, -1);
    
    		// reload page
    		window.location.replace( url );
    
    	});
    
    })(jQuery);
    </script>
Viewing 1 post (of 1 total)

You must be logged in to reply to this topic.