<?php /** * Function to display the front end checkboxes for the ajut filter * * references: * basic start * https://www.advancedcustomfields.com/resources/creating-wp-archive-custom-field-filter/ * * wordpress full form example * https://wordpress.stackexchange.com/questions/383599/form-checkbox-value-going-to-dynamic-url * * checkbox adaptation query * https://wordpress.stackexchange.com/a/102915 * * form GET and POST * https://www.formget.com/php-checkbox/ * * @package Xarxaprod_wp_plugin */ ?> <?php if( ! function_exists( 'xarxaprod_ajuts_filters_form') ) { function xarxaprod_ajuts_filters_form() { ?> <div id="archive-filters" class="xarxaprod-filters"> <?php // output all possible values of a checkbox $groupkey = "group_63ab636898703"; // write here the key for the group of fields from acf if( $groupkey ) { ?> <?php // start the form ?> <form id="form-ajuts" name="search-ajuts"> <?php $groupkey_fields = acf_get_fields($groupkey); foreach( $groupkey_fields as $field_key ) { if( $field_key['type'] == 'checkbox' ){ // https://wordpress.stackexchange.com/a/102915 $fields = get_field_object($field_key['key']); if( $fields ) { // check for values from meta fields db in url foreach( $GLOBALS['my_query_filters_ajut'] as $key => $fieldname ) { // check for values in url and get value if available if( isset($_GET[ $fieldname ]) ) { $filteredvalues['value'] = explode(',', $_GET[ $fieldname ]); } else { $filteredvalues['value'] = []; }; //end check for values in url // construct the checkboxes if( $fieldname == $fields['name']) { ?> <section id="fund-filter fund-filter-<?php echo $fields['name']; ?>" class="<?php echo $fields['name']; ?>"> <h5 class="xarxaprod-titol-opcions"><?php echo $fields['label'];?></h5> <?php foreach( $fields['choices'] as $choicevalue => $choicelabel ) { ?> <div class="filter" data-filter="<?php echo $fields['name'];?>"> <input class="xarxaprod-filter" type="checkbox" name="<?php echo $fields['name'];?>" <?php if( in_array( $choicevalue, $filteredvalues['value']) ) { echo 'checked'; } ?> value="<?php echo $choicevalue; ?>" /> <label for="<?php echo $choicevalue; ?>"><?php echo $choicelabel;?></label> </div> <?php };//end foreach fields['choices'] ?> </section> <?php }; //end if fieldname == fields['name'] ?> <?php // end of construct checkboxes ?> <?php }; // end check for values from meta fields db in url ?> <?php }; //end if field_key['key'] ?> <?php }; //end if type checkbox ?> <?php }; //end foreach groupkey field ?> <?php //echo '<p><span id="filterlink"></span></p>';?> <p><a id="submitfilteredlink" name="submit-ajut" class="button button-more" href="">enviar</a> </p> </form> <?php //close the form and subit ?> <?php }; //end if groupkey ?> <aside id="search-form-ajuts" class="xarxaprod-search-ajuts"> <?php // search form for custom post type 'xarxaprod-ajut' // <input type="hidden" value="xarxaprod-ajut" name="post_type" id="post_type" /> // https://developer.wordpress.org/reference/functions/get_search_form/#comment-369 // https://wordpress.stackexchange.com/questions/313037/restrict-a-sear ch-to-a-custom-post-type ?> <form class="xarxaprod-search-form" role="search" method="get" action="/"> <label class="screen-reader-text" for="search">Search in ajuts</label> <input type="search" id="search" class="search-field" placeholder="cerca amb paraula clau..." value="<?php the_search_query(); ?>" name="s" /> <input type="submit" id="searchsubmit" class="search-submit" value="cerca"> <span class="xarxaprod-search-submit xarxaprod-icon-search"></span> <input type="hidden" value="xarxaprod-ajut" name="post_type" id="post_type" /> </form> </aside> </div> <script type="text/javascript"> (function($) { // https://stackoverflow.com/a/12025482 // change $('#archive-filters').on('click', 'input', function(){ // vars var url = '<?php echo home_url('ajuts/'); ?>'; args = {}; var appendtoURL = ''; var eachfiltered = ''; var valueschecked = ''; // loop over filters $('#archive-filters .filter').each(function(){ // check if is first appearance of each if( eachfiltered != $(this).data('filter') ){ // save already calculated field=val01,val02,val03 if( eachfiltered != '' && valueschecked != '' ){ // remove last ',' valueschecked = valueschecked.slice(0, -1); appendtoURL += eachfiltered +'=' +valueschecked +'&'; }; // start new fieldname filtered eachfiltered = $(this).data('filter'); // reset values valueschecked = ''; // find checked inputs $(this).find('input:checked').each(function(){ // if not empty save value and , if( $(this).val() != '' ){ valueschecked += $(this).val() + ','; }; }); //alert( appendtoURL +":" +eachfiltered +"=" +valuescheked); } else { // we have previous values checked // find checked inputs //if( $(this).val() != '' ){ // if not empty append value and , $(this).find('input:checked').each(function(){ valueschecked += $(this).val() + ','; }); //alert( appendtoURL +":not:" +eachfiltered +"=" +valuescheked); //}; }; }); // remove last ',' valueschecked = valueschecked.slice(0, -1); // save last cycled filtered value already calculated field=val01,val02,val03 appendtoURL += eachfiltered +'=' +valueschecked +'&'; // remove last & appendtoURL = appendtoURL.slice(0, -1); // update url url += '?' +appendtoURL; // show or modify the url //alert( url ); //$('#filterlink').text(url); // convert a href url to new value $('#submitfilteredlink').attr('href',url); }); })(jQuery); </script> <?php }; //end xarxaprod_ajuts_filters_form }; // end if ! functions_exists ?>