oficinasuport-wp-plugin/includes/custom-field-ajuts-filter-f...

166 lines
5.2 KiB
PHP
Raw Normal View History

<?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 Oficina_de_Suport_theme
*/
?>
<?php
if( ! function_exists( 'ofisuport_ajuts_filters_form' ) ):
function ofisuport_ajuts_filters_form() {
?>
<div id="archive-filters" class="ofisuport-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'] as $key => $fieldname ) {
// check for values in url and get value if available
if( isset($_GET[ $fieldname ]) ) {
$filteredvalues['value'] = explode(',', $_GET[ $fieldname ]);
};
//end check for values in url
// construct the checkboxes
if( $fieldname == $fields['name']) {
?>
<section id="fund-filter-<?php echo $fields['name']; ?>" class="<?php echo $fields['name']; ?>">
<h5><?php echo $fields['label'];?></h5>
<?php foreach( $fields['choices'] as $choicevalue => $choicelabel ) { ?>
<div class="filter" data-filter="<?php echo $fields['name'];?>">
<input class="ofisuport-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 ?>
<p><b>Results:</b> <span id="results"></span></p>
<button type="button" name="submit-ajut" class="button-more">enviar</button>
</form>
<?php //close the form and subit ?>
<?php }; //end if groupkey ?>
</div>
<script type="text/javascript">
(function($) {
// change
//$('#archive-filters').on('change', 'input[type="checkbox"]', function(){
$('#archive-filters').on('click', 'button', 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
appendtoURL += eachfiltered +'=' +valueschecked +'&';
// remove last ','
appendtoURL = appendtoURL.slice(0, -1);
// 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() + ',';
}
});
} 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() + ',';
});
}
};
});
// save last cycled filtered value already calculated field=val01,val02,val03
appendtoURL += eachfiltered +'=' +valueschecked +'&';
// remove last &
appendtoURL = url.slice(0, -1);
// update url
url += '?';
// reload page
//$('#archive-filters button').on('click', function () {
alert( "estoy en: " +url +appendtoURL);
//window.location.replace( url );
//});
});
})(jQuery);
</script>
<?php
}; //end ofisuport_display_filters()
endif; // end if ! functionexists
?>