//Shortcode Created add_shortcode( 'post_view', 'dtwd_special_collection_view' ); function dtwd_special_collection_view( $atts ) { $atts = shortcode_atts( array( 'post_type' => 'post', 'posts_per_page' => '-1', 'post_status' => 'publish', 'pid' => '', 'bid' => '', 'order' => 'DESC' ), $atts, 'show_post' ); ob_start(); $squery = array( 'post_type' => $atts['post_type'], 'posts_per_page' => -1, ); if($atts['bid']!=''){ $squery['meta_query'] = array( array( 'key' => 'builder_name', // ACF field name for the relationship 'value' => $atts['bid'], 'compare' => '=', ), ); } if($atts['pid']!=''){ $squery['p'] = $atts['pid']; } //var_dump($squery); $query = new WP_Query( $squery ); if ( $query->have_posts() ) { ?> <div class="post-collection old <?php echo $atts['pid'];?>"> <?php while ( $query->have_posts() ) : $query->the_post(); @$featured_mimg_url = get_field('collection_photo', get_the_ID());?> <div class="dyn-filter"></div> <?php $collection = ob_get_clean(); return $collection; } } //Added Js in Footer add_action( 'wp_footer', 'ajax_fetch_posts_coll' ); function ajax_fetch_posts_coll() { ?> <style>.dyn-filter{display: none;}</style> <script> jQuery(document).on('click', '.prcing-toggle, .builder-names label.b-names', function(e) { setTimeout(function(){ get_price = jQuery('.prcing-toggle').find('.active').text().trim(); //console.log(get_price); get_type = jQuery('.builders-box input[type="checkbox"]:checked').serialize(); if(get_type === 'all=All' && get_price === 'Low to High'){ console.log(get_type+' - '+get_price); jQuery('.post-collection.old').show(); jQuery('.dyn-filter').hide(); return; }else{ jQuery.ajax({ url: '<?php echo admin_url('admin-ajax.php'); ?>', type: 'post', data: { action: 'data_fetch_coll', get_price_sort: get_price, get_type_sort : get_type, }, success: function(data) { console.log(data); jQuery('.post-collection.old').hide(); jQuery('.dyn-filter').html(data).show(); }, error: function() { console.log("Error"); } }); } }, 1000); }); </script> <?php } //Ajax Action add_action('wp_ajax_data_fetch_coll' , 'data_fetch_coll'); add_action('wp_ajax_nopriv_data_fetch_coll','data_fetch_coll'); function data_fetch_coll(){ $get_price_sort = $_POST["get_price_sort"]; $get_type_sort = $_POST["get_type_sort"]; if($get_price_sort=='Low to High'){ $order = 'ASC'; $mkey = 'price_ranges_for_sort'; }else{ $order = 'DESC'; $mkey = 'high_price_range_for_sort'; } //echo $get_price_sort.' -Response- '.$get_type_sort.' '.$order; parse_str($get_type_sort, $get_type_sortData); $bid = array(); $all_res = 0; foreach ($get_type_sortData as $key => $value) { $builder = urldecode($value); if($builder != 'All'){ $bid[] = c2_get_post_id_by_title($builder); //echo "Selected builder: $get_id $builder<br>"; }else{ $all_res = 1; } } $query = array( 'post_type' => 'home-collection', 'posts_per_page' => -1, 'post_status' => 'publish', 'meta_key' => $mkey, 'orderby' => 'meta_value', 'order' => $order, ); if($get_type_sort!='' && $all_res != 1){ $query['meta_query'] = array( array( 'key' => 'builder_name', // ACF field name for the relationship 'value' => $bid, 'compare' => 'IN', ), ); } $query = new WP_Query( $query ); if ( $query->have_posts() ) { ?> <div class="builder-price-sorter"> <div class="prcing-toggle"> <div class="price-tab">Low to High</div> <div class="price-tab active">High to Low</div> </div> </div> <div class="builder-names"> <div class="builder-toggle">Filter By Builder</div> <div class="builders-box"> <label for="all" class="b-names active"> <input type="checkbox" id="all" name="all" value="All"> All</label> <label for="Builder4" class="b-names"> <input type="checkbox" id="Builder4" name="Builder4" value="Builder 4"> Builder 4</label> <label for="Builder5" class="b-names"> <input type="checkbox" id="Builder5" name="Builder5" value="Builder 5"> Builder 5</label> </div> </div> <div class="post-collection new <?php echo $atts['pid'];?>"> <?php while ( $query->have_posts() ) : $query->the_post(); @$featured_mimg_url = get_field('collection_photo', get_the_ID()); //$collection_name = get_field('collection_name', get_the_ID());?> <div class="collection-divider"></div> <?php endwhile; }else{ echo '<h2 style="text-align:center;">No homes found!</h2>'; } die(); } //Function to get post id by title function c2_get_post_id_by_title( string $title = '' ): int { $posts = get_posts( array( 'post_type' => 'post', 'title' => $title, 'numberposts' => 1, 'update_post_term_cache' => false, 'update_post_meta_cache' => false, 'orderby' => 'post_date ID', 'order' => 'ASC', 'fields' => 'ids' ) ); return empty( $posts ) ? get_the_ID() : $posts[0]; }
Jagdish Sarma Asked question February 29, 2024