HEX
Server: Apache/2.4.41 (Ubuntu)
System: Linux sci 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64
User: tpdc (1002)
PHP: 7.4.3-4ubuntu2.29
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: /var/www/html/nsci/wp-content/plugins/penci-portfolio/inc/portfolio.php
<?php
/**
 * Add portfolio shortcode
 *
 */

if ( ! class_exists( 'Penci_Soledad_Portfolio_Shortcode' ) ):
	class Penci_Soledad_Portfolio_Shortcode {
		public function __construct() {
			add_shortcode( 'portfolio', array( $this, 'portfolio_shortcode' ) );
		}

		function portfolio_shortcode( $atts, $content = null ) {
			$image_type = 'landscape';
			$pagination = $pag_pos = $numbermore = $item_style = '';
			$loop       = $cat = $elementor_query = '';

			extract( shortcode_atts( array(
				'style'           => 'masonry',
				'image_type'      => 'landscape',
				'item_style'      => 'text_overlay',
				'number'          => '-1',
				'lightbox'        => 'false',
				'column'          => '3',
				'cat'             => '',
				'filter'          => 'true',
				'all_text'        => __( 'All', 'pencidesign' ),
				'pagination'      => 'number',
				'numbermore'      => 6,
				'loop'            => '',
				'elementor_query' => ''
			), $atts ) );


			/* Set default value when properties is not valid */
			$image_thumb = 'penci-masonry-thumb';
			if ( $style == 'grid' ): $image_thumb = 'penci-thumb'; endif;
			if ( ! is_numeric( $number ) ): $number = '-1'; endif;
			if ( ! in_array( $column, array( '2', '3' ) ) ): $column = '3'; endif;
			if ( $filter != 'false' ): $filter = 'true'; endif;
			if ( empty( $all_text ) ): $all_text = __( 'All', 'pencidesign' ); endif;



			$image_thumb_pre = '';
			if ( $style == 'grid' ) {
				if ( 'square' == $image_type ) {
					$image_thumb_pre = 'penci-thumb-square';
				} elseif ( 'vertical' == $image_type ) {
					$image_thumb_pre = 'penci-thumb-vertical';
				}
			}

			if ( $image_thumb_pre ) {
				$image_thumb = $image_thumb_pre;
			}

			/* Display Portfolio */
			global $wp_query, $post;
			if ( get_query_var( 'paged' ) ) {
				$paged = get_query_var( 'paged' );
			} elseif ( get_query_var( 'page' ) ) {
				$paged = get_query_var( 'page' );
			} else {
				$paged = 1;
			}

			$query = array(
				'post_type'      => 'portfolio',
				'posts_per_page' => $number,
				'paged'          => $paged
			);

			$data_query = array( 'post_type' => 'portfolio' );

			if ( ( ! $loop || 'post_type:portfolio' == $loop ) && $cat ) {

				$cat_array = array();
				if ( ! empty ( $cat ) ) {

					$cat                = str_replace( ' ', '', $cat );
					$cat_array          = explode( ',', $cat );
					$query['tax_query'] = array(
						array(
							'taxonomy' => 'portfolio-category',
							'field'    => 'slug',
							'terms'    => $cat_array
						),
					);

					$_cat_array_id   = '';
					$_cat_array_id_i = 0;
					foreach ( $cat_array as $cat_array_item ) {
						$cat_array_term = get_term_by( 'slug', $cat_array_item, 'portfolio-category' );
						if ( isset( $cat_array_term->term_id ) && $cat_array_term->term_id ) {

							if ( $_cat_array_id_i > 0 ) {
								$_cat_array_id .= ',';
							}

							$_cat_array_id .= $cat_array_term->term_id;

							$_cat_array_id_i ++;
						}
					}

					if ( $_cat_array_id ) {
						$data_query['tax_query'] = $_cat_array_id;
					}
				}
			}

			if ( $elementor_query ) {

				$data_query = $elementor_query;
				if ( isset( $elementor_query['filter_bar_ids'] ) ) {
					$data_query['tax_query'] = $elementor_query['filter_bar_ids'];
					unset( $elementor_query['filter_bar_ids'] );
				}

				$query = $elementor_query;
				if ( $paged > 1 && isset( $query['posts_per_page'] ) ) {

					$query_offset_el = isset(  $query['offset'] ) ? intval( $query['offset'] ) : 0;
					$page_offset     = $query_offset_el + ( ( $paged - 1 ) * intval( $query['posts_per_page'] ) );
					$query['offset'] = $page_offset;
				}

			} elseif ( $loop ) {
				$data_query    = PenciSoledadLoopSettings::parseData( $loop );
				$query_builder = new PenciSoledadLoopQueryBuilder( $data_query );
				$loop_query    = $query_builder->build_args();

				$query = wp_parse_args( $loop_query, $query );

				if ( $paged > 1 && isset( $query['offset'] ) && isset( $query['posts_per_page'] ) ) {
					$page_offset = intval( $query['offset'] ) + ( ( $paged - 1 ) * intval( $query['posts_per_page'] ) );

					$query['offset'] = $page_offset;
				}
			}

			$portfolio_query = new WP_Query( $query );
			if ( ! $portfolio_query->have_posts() ) {
				return;
			}

			$portfolio_tax = $this->get_taxs_by_post_type( $data_query );

			// Get filter by post
			//$portfolio_terms = $this->get_terms_by_query2( $query, $portfolio_tax );

			// Get filter with category user choose
			$portfolio_terms = $this->get_terms_by_query( $data_query );
			$cat_select      = $this->get_only_cat_select( $data_query );

			$unique_id = 'penci-portfolio' . '--' . rand( 1000, 100000 );
			ob_start();
			/* Portfolio Filter */
			?>
			<div id="<?php echo esc_attr( $unique_id ); ?>" class="wrapper-penci-portfolio">
				<?php if ( $filter == 'true' ):
					?>
					<?php if ( ! empty( $portfolio_terms ) ): ?>
					<div class="penci-portfolio-filter">
						<ul>
							<li class="all active">
								<a data-term="*" data-filter="*" href="#"><?php echo $all_text; ?></a>
							</li>
							<?php
							$term_arrayss = array();
							foreach ( $portfolio_terms as $term ) {
								if ( 0 != $term->parent ) {
									continue;
								}

								$term_id   = isset( $term->term_id ) ? $term->term_id : '';
								$term_slug = isset( $term->slug ) ? esc_attr( $term->slug ) : '';
								$term_name = isset( $term->name ) ? esc_attr( $term->name ) : '';
								$taxonomy  = isset( $term->taxonomy ) ? esc_attr( $term->taxonomy ) : '';

								if ( $cat_select && ! in_array( $term_id, $cat_select ) ) {
									continue;
								}

								$term_arrayss[ $term_name ] = array( $term_slug, $taxonomy );
							}

							if ( ! empty( $term_arrayss ) ) {
								ksort( $term_arrayss );
								foreach ( $term_arrayss as $keyx => $valx ) {
									printf( '<li><a data-filter=".penci-%s" data-term="%s" data-tax="%s" href="#">%s</a></li>',
										$valx[0],
										$valx[0],
										$valx[1],
										$keyx
									);
								}
							}
							?>
						</ul>
					</div><!-- .portfolio-filter -->
					<div class="clearfix"></div>
				<?php endif; ?>
				<?php endif; ?>
				<div id="<?php echo $unique_id; ?>" class="penci-portfolio penci-portfolio-wrap column-<?php echo $column; ?> penci-portfolio-<?php echo $item_style; ?>">
					<div class="inner-portfolio-posts">
						<?php while ( $portfolio_query->have_posts() ): $portfolio_query->the_post(); ?>
							<?php
							$item_classes   = array( 'portfolio-item' );
							$item_cats      = get_the_terms( get_the_ID(), $portfolio_tax );
							$tfl_item_terms = array();
							if ( $item_cats ) {
								foreach ( $item_cats as $item_cat ) {
									$item_classes[]   = 'penci-' . $item_cat->slug;
									$tfl_item_terms[] = $item_cat->slug;
								}
							}
							$item_classes = implode( ' ', $item_classes );
							?>
							<article class="<?php echo $item_classes; ?>" id="portfolio-<?php the_ID(); ?>" data-pflID="<?php the_ID(); ?>" data-terms="<?php echo implode( ' ', $tfl_item_terms ); ?>">
								<div class="inner-item-portfolio">
									<div class="info-portfolio">
										<div class="penci-portfolio-thumbnail">
											<?php if ( $lightbox != 'true' || ! function_exists( 'penci_get_featured_image_size' ) ) { ?>
											<a href="<?php the_permalink(); ?>">
												<?php } else { ?>
												<a class="penci-portfolio-open-lightbox lightbox-port-thumb" title="<?php esc_attr( the_title() ); ?>" data-rel="penci-gallery-image-content" href="<?php echo penci_get_featured_image_size( get_the_ID(), 'penci-single-full' ); ?>">
													<?php } ?>
													<?php
													if ( has_post_thumbnail() ) {

														$image_portfolio = get_the_post_thumbnail( get_the_ID(), $image_thumb );
													} else {
														$image_portfolio = '<img src="' . PENCI_PORTFOLIO_URL . '/images/no-thumbnail.jpg" alt="' . __( "No Thumbnail", "pencidesign" ) . '" />';
													}

													Penci_Portfolio::get_image_ratio( $image_portfolio );
													?>
												</a>
										</div>
										<div class="portfolio-desc">
											<a href="<?php the_permalink(); ?>">
												<h3 class="portfolio-title"><?php the_title(); ?></h3>
												<?php
												/* Get list term of this portfolio */
												if ( 'product' != get_post_type() ) {
													$get_terms = wp_get_post_terms( get_the_ID(), $portfolio_tax, array( "fields" => "names" ) );
													$get_terms = implode( ', ', $get_terms );
												} else {
													$GLOBALS['post'] = get_post( get_the_ID() );
													setup_postdata( $GLOBALS['post'] );
													global $product;

													if ( '' === $product->get_price() ) {
														$price = apply_filters( 'woocommerce_empty_price_html', '', $product );
													} elseif ( $product->is_on_sale() ) {
														$price = wc_format_sale_price( wc_get_price_to_display( $product, array( 'price' => $product->get_regular_price() ) ), wc_get_price_to_display( $product ) ) . $product->get_price_suffix();
													} else {
														$price = wc_price( wc_get_price_to_display( $product ) ) . $product->get_price_suffix();
													}

													$get_terms = apply_filters( 'woocommerce_get_price_html', $price, $product );
												}
												if ( ! empty( $get_terms ) ):
													?>
													<span class="portfolio-cat"><?php echo $get_terms; ?></span>
												<?php endif; ?>
											</a>
										</div>
									</div>
								</div>
							</article>
						<?php endwhile;
						wp_reset_postdata(); ?>
					</div>
				</div>

				<div class="penci-pagenavi-shortcode">
					<?php
					if ( in_array( $pagination, array( 'load_more', 'infinite' ) ) ) {

						$button_class = 'penci-ajax-more penci-plf-loadmore';
						$button_class .= 'load_more' == $pagination ? ' penci-plf-more-click' : ' penci-infinite-scroll';

						$data_loadmore = 'data-mes_no_more="' . ( function_exists( 'penci_get_setting' ) ? penci_get_setting( 'penci_trans_no_more_posts' ) : '' ) . '"';
						$data_loadmore .= 'data-mes="' . ( function_exists( 'penci_get_setting' ) ? penci_get_setting( 'penci_trans_load_more_posts' ) : '' ) . '"';

						?>
						<div class="penci-pagination <?php echo $button_class; ?>">

							<a class="penci-ajax-more-button" <?php echo $data_loadmore; ?>>
								<span class="ajax-more-text"><?php echo( function_exists( 'penci_get_setting' ) ? penci_get_setting( 'penci_trans_load_more_posts' ) : '' ); ?></span>
								<span class="penci-pfl-ajaxdot"></span>
							</a>
						</div>

						<?php
					} else if ( function_exists( 'penci_pagination_numbers' ) && ( 'none' != $pagination ) ) {
						echo penci_pagination_numbers( $portfolio_query );
					}
					?>
				</div>
				<?php
				$category_post_count = array();
				$category_query      = array_merge( $query, array(
					'paged'              => 0,
					'posts_per_page'     => - 1,
					'portfolio_category' => '',
					'fields'             => 'ids'
				) );


				$all_items_count = count( get_posts( $category_query ) );

				$category_tax_query = isset( $category_query['tax_query'] ) ? $category_query['tax_query'] : array();

				foreach ( $portfolio_terms as $term ) {

					$category_query['tax_query']        = array_merge( $category_tax_query, array(
						'relation' => 'AND',
						array(
							'taxonomy'         => $portfolio_tax,
							'field'            => 'term_id',
							'terms'            => $term->term_id,
							'include_children' => false
						)
					) );
					$get_posts_category_query2          = get_posts( $category_query );
					$category_post_count[ $term->slug ] = count( (array) $get_posts_category_query2 );
				}

				$portfolio_data_js = array(
					'instanceId'   => $unique_id,
					'atts'         => $atts,
					'query'        => $query,
					'layout'       => $style,
					'imagetype'    => $image_type,
					'count'        => $all_items_count,
					'countByTerms' => $category_post_count,
					'currentTerm'  => '*',
					'currentTax'   => $portfolio_tax,
					'lightbox'     => $lightbox,
				);
				?>
				<script type="text/javascript">
					portfolioDataJs.push( <?php echo json_encode( $portfolio_data_js ); ?> );
				</script>
			</div>

			<?php
			$return = ob_get_clean();
			$return .= $this->get_custom_css( $unique_id, $atts );

			return $return;
		}

		public function get_custom_css( $block_id, $atts ) {
			$atts = wp_parse_args( $atts, array(
				'pbgoverlay_color' => '',
				'ptitle_color'     => '',
				'ptitle_hcolor'    => '',
				'ptitle_fsize'     => '',
				'use_ptitle_typo'  => '',
				'ptitle_typo'      => '',
				'pcat_color'       => '',
				'pcat_hcolor'      => '',
				'pcat_fsize'       => '',
				'use_pcat_typo'    => '',
				'pcat_typo'        => '',

				'pfilter_color'    => '',
				'pfilter_hcolor'   => '',
				'pfilter_fsize'    => '',
				'use_pfilter_typo' => '',
				'pfilter_typo'     => '',
			) );

			$css_custom = '';
			$block_id   = '#' . $block_id;

			if ( $atts['pfilter_color'] ) {
				$css_custom .= $block_id . ' .penci-portfolio-filter ul li a,';
				$css_custom .= $block_id . ' .post-entry .penci-portfolio-filter ul li a{ color:' . esc_attr( $atts['pfilter_color'] ) . ' }';
			}
			if ( $atts['pfilter_hcolor'] ) {
				$css_custom .= $block_id . ' .penci-portfolio-filter ul li a:hover,';
				$css_custom .= $block_id . ' .post-entry .penci-portfolio-filter ul li a:hover{ color:' . esc_attr( $atts['pfilter_hcolor'] ) . ' }';
			}

			if ( class_exists( 'Penci_Vc_Helper' ) ) {
				$css_custom .= Penci_Vc_Helper::vc_google_fonts_parse_attributes( array(
					'font_size'  => $atts['pfilter_fsize'],
					'font_style' => $atts['use_pfilter_typo'] ? $atts['pfilter_typo'] : '',
					'template'   => $block_id . ' .penci-portfolio-filter ul li a,' . $block_id . ' .post-entry .penci-portfolio-filter ul li a{ %s }',
				) );
			}

			if ( $atts['pbgoverlay_color'] ) {
				$css_custom .= $block_id . ' .penci-portfolio-thumbnail a:after{ background-color:' . esc_attr( $atts['pbgoverlay_color'] ) . ' }';
			}
			if ( $atts['ptitle_color'] ) {
				$css_custom .= $block_id . ' .inner-item-portfolio .portfolio-desc h3{ color:' . esc_attr( $atts['ptitle_color'] ) . ' }';
			}
			if ( $atts['ptitle_hcolor'] ) {
				$css_custom .= $block_id . ' .inner-item-portfolio .portfolio-desc h3:hover{ color:' . esc_attr( $atts['ptitle_hcolor'] ) . ' }';
			}

			if ( class_exists( 'Penci_Vc_Helper' ) ) {
				$css_custom .= Penci_Vc_Helper::vc_google_fonts_parse_attributes( array(
					'font_size'  => $atts['ptitle_fsize'],
					'font_style' => $atts['use_ptitle_typo'] ? $atts['ptitle_typo'] : '',
					'template'   => $block_id . ' .inner-item-portfolio .portfolio-desc h3{ %s }',
				) );
			}

			if ( $atts['pcat_color'] ) {
				$css_custom .= $block_id . ' .inner-item-portfolio .portfolio-desc span{ color:' . esc_attr( $atts['pcat_color'] ) . ' }';
			}
			if ( $atts['pcat_hcolor'] ) {
				$css_custom .= $block_id . ' .inner-item-portfolio .portfolio-desc span:hover{ color:' . esc_attr( $atts['pcat_hcolor'] ) . ' }';
			}

			if ( class_exists( 'Penci_Vc_Helper' ) ) {
				$css_custom .= Penci_Vc_Helper::vc_google_fonts_parse_attributes( array(
					'font_size'  => $atts['pcat_fsize'],
					'font_style' => $atts['use_pcat_typo'] ? $atts['pcat_typo'] : '',
					'template'   => $block_id . ' .inner-item-portfolio .portfolio-desc span{ %s }',
				) );
			}

			if ( $css_custom ) {
				return '<style>' . $css_custom . '</style>';
			}

			return '';
		}

		public function get_only_cat_select( $data_query ) {
			$post_type = $this->get_only_post_type( $data_query );
			$cats      = array();
			if ( 'post' == $post_type ) {
				$cats = $this->get_vc_category( $data_query );
			} elseif ( $post_type ) {
				$cats = $this->get_vc_tax_query( $data_query );
			}

			$cats = $this->remove_exclude_param( $cats );

			return $cats;
		}

		public function get_terms_by_query( $data_query ) {
			$object_terms = array();

			$tax = '';

			$post_type     = $this->get_only_post_type( $data_query );
			$id_categories = '';

			if ( 'post' == $post_type ) {
				$tax = 'category';

				if ( isset( $data_query['categories'] ) && $data_query['categories'] ) {
					$id_categories = $data_query['categories'];
				} elseif ( isset( $data_query['tax_query'] ) && $data_query['tax_query'] ) {
					$id_categories = $data_query['tax_query'];
				} else {
					$object_terms = get_categories( array( 'hide_empty' => true ) );
				}
			} elseif ( 'portfolio' == $post_type ) {
				$tax = 'portfolio-category';

				if ( isset( $data_query['tax_query'] ) && $data_query['tax_query'] ) {
					$id_categories = $data_query['tax_query'];
				} else {
					$object_terms = get_terms( $tax, array( 'hide_empty' => true ) );
				}
			} elseif ( 'product' == $post_type ) {
				$tax = 'product_cat';

				if ( isset( $data_query['tax_query'] ) && $data_query['tax_query'] ) {
					$id_categories = $data_query['tax_query'];
				} else {
					$object_terms = get_terms( $tax, array( 'hide_empty' => true ) );
				}
			} elseif ( $post_type ) {
				$taxonomy_objects = get_object_taxonomies( $post_type );

				if ( isset( $taxonomy_objects[0] ) ) {
					$tax = $taxonomy_objects[0];
				}

				if ( isset( $data_query['tax_query'] ) && $data_query['tax_query'] ) {
					$id_categories = $data_query['tax_query'];
				}
			}


			if ( $id_categories && $tax ) {
				$id_categories = $this->stringToArray( $id_categories );
				foreach ( (array) $id_categories as $id_category ) {
					$object_terms[] = get_term( $id_category, $tax );
				}
			}

			return $object_terms;
		}

		/**
		 * @param $args
		 * @param string $tax
		 *
		 * @return array|void|WP_Error
		 */
		public function get_terms_by_query2( $args, $tax = 'portfolio-category' ) {
			if ( ! $tax ) {
				return array();
			}


			// Remove param paged
			if ( isset( $args['paged'] ) ) {
				unset( $args['paged'] );
			}
			$args['fields']         = 'ids';
			$args['posts_per_page'] = 50;

			$posts = new WP_Query( $args );

			if ( ! $posts->have_posts() ) {
				return;
			}

			$object_terms = wp_get_object_terms( $posts->posts, $tax );

			if ( is_wp_error( $object_terms ) ) {
				return array();
			}

			$term_ids = array();
			if ( $object_terms ) {
				foreach ( (array) $object_terms as $term ) {
					$term_ids[] = $term->term_id;
				}

				foreach ( (array) $object_terms as $term ) {
					if ( ! in_array( $term->parent, $term_ids ) ) {
						$term->parent = 0;
					}
				}
			}

			return $object_terms;
		}

		public function get_taxs_by_post_type( $data ) {
			$tax = '';

			$post_type = $this->get_only_post_type( $data );

			if ( 'post' == $post_type ) {
				$tax = 'category';
			} elseif ( 'portfolio' == $post_type ) {
				$tax = 'portfolio-category';
			} elseif ( 'product' == $post_type ) {
				$tax = 'product_cat';
			} elseif ( $post_type ) {
				$taxonomy_objects = get_object_taxonomies( $post_type );

				if ( isset( $taxonomy_objects[0] ) ) {
					$tax = $taxonomy_objects[0];
				}
			}

			return $tax;
		}

		public function get_only_post_type( $data ) {
			$post_type       = $this->get_vc_post_type( $data );
			$count_post_type = count( (array) $post_type );


			if ( $count_post_type > 1 ) {
				return '';
			}

			$post_type = reset( $post_type );

			return $post_type;
		}

		public function get_vc_post_type( $data ) {
			$post_type = isset( $data['post_type'] ) ? $data['post_type'] : '';

			if ( ! $post_type ) {
				return '';
			}

			$post_type = $this->stringToArray( $post_type );
			$post_type = array_filter( $post_type );

			return $post_type;
		}

		public function get_vc_category( $data ) {

			$cats = isset( $data['categories'] ) ? $data['categories'] : '';

			if ( ! $cats ) {
				return array();
			}

			$cats = $this->stringToArray( $cats );
			$cats = array_filter( $cats );

			return $cats;
		}

		public function get_vc_tax_query( $data ) {

			$tax_query = isset( $data['tax_query'] ) ? $data['tax_query'] : '';

			if ( ! $tax_query ) {
				return array();
			}

			$tax_query = $this->stringToArray( $tax_query );
			$tax_query = array_filter( $tax_query );

			return $tax_query;
		}

		public function remove_exclude_param( $data ) {
			if ( ! $data ) {
				return $data;
			}

			foreach ( (array) $data as $key => $value ) {
				$value = (int) $value;

				if ( $value < 0 ) {
					unset( $data[ $key ] );
				}
			}

			return $data;
		}

		public function get_first_item_array( $array ) {
			return isset( $array[0] ) ? $array[0] : '';
		}

		public function stringToArray( $value ) {
			$valid_values = array();

			if( is_string( $value ) ){
				$list         = preg_split( '/\,[\s]*/', $value );
				if( $list ){
					foreach ( (array)$list as $v ) {
						if ( strlen( $v ) > 0 ) {
							$valid_values[] = $v;
						}
					}
				}
			}else{
				$valid_values = $value;
			}

			return $valid_values;
		}
	}

	new Penci_Soledad_Portfolio_Shortcode;
endif;

if ( ! function_exists( 'penci_portfolio_shortcode' ) ) {
	function penci_portfolio_shortcode( $atts, $content = null ) {
		return '';
	}
}

if ( ! function_exists( 'penci_pfl_more_post_ajax_func' ) ):

	add_action( 'wp_ajax_nopriv_penci_pfl_more_post_ajax', 'penci_pfl_more_post_ajax_func' );
	add_action( 'wp_ajax_penci_pfl_more_post_ajax', 'penci_pfl_more_post_ajax_func' );

	function penci_pfl_more_post_ajax_func() {
		if ( is_user_logged_in() ) {
			$nonce = isset( $_POST['nonce'] ) ? $_POST['nonce'] : '';
			if ( ! wp_verify_nonce( $nonce, 'ajax-nonce' ) ) {
				die ( 'Nope!' );
			}
		}

		$datafilter    = isset( $_POST['datafilter'] ) ? $_POST['datafilter'] : '';
		$query         = isset( $datafilter['query'] ) ? $datafilter['query'] : '';
		$shown_ids     = isset( $datafilter['pflShowIds'] ) ? $datafilter['pflShowIds'] : '';
		$currentTerm   = isset( $datafilter['currentTerm'] ) ? $datafilter['currentTerm'] : '';
		$portfolio_tax = isset( $datafilter['currentTax'] ) ? $datafilter['currentTax'] : 'portfolio-category';
		$atts          = isset( $datafilter['atts'] ) ? $datafilter['atts'] : '';
		$numbermore    = isset( $atts['numbermore'] ) ? $atts['numbermore'] : '6';
		$style         = ( isset( $datafilter['layout'] ) ) ? $datafilter['layout'] : 'grid';
		$lightbox      = ( isset( $datafilter['lightbox'] ) ) ? $datafilter['lightbox'] : 'false';
		$image_type    = ( isset( $datafilter['imagetype'] ) ) ? $datafilter['imagetype'] : '';


		$pre_query = array_merge( $query, array(
			'ignore_sticky_posts' => true,
			'post__not_in'        => $shown_ids,
			'paged'               => 0,
			'post_status'         => 'publish',
			'posts_per_page'      => $numbermore,
		) );

		if ( $currentTerm && '*' != $currentTerm ) {
			$pre_query['tax_query'] = array(
				array(
					'taxonomy' => $portfolio_tax,
					'field'    => 'slug',
					'terms'    => $currentTerm
				)
			);
		}

		$portfolio_query = new WP_Query( $pre_query );

		if ( ! $portfolio_query->have_posts() ) {
			wp_send_json_success( array( 'items' => '' ) );
		}

		$image_thumb = 'penci-masonry-thumb';
		if ( $style == 'grid' ): $image_thumb = 'penci-thumb'; endif;

		$image_thumb_pre = '';
		if ( 'square' == $image_type ) {
			$image_thumb_pre = 'penci-thumb-square';
		} elseif ( 'vertical' == $image_type ) {
			$image_thumb_pre = 'penci-thumb-vertical';
		}

		if ( $image_thumb_pre ) {
			$image_thumb = $image_thumb_pre;
		}
		ob_start();
		while ( $portfolio_query->have_posts() ): $portfolio_query->the_post(); ?>
			<?php
			$item_classes   = array( 'portfolio-item' );
			$item_cats      = get_the_terms( get_the_ID(), $portfolio_tax );
			$tfl_item_terms = array();
			if ( $item_cats ) {
				foreach ( $item_cats as $item_cat ) {
					$item_classes[]   = 'penci-' . $item_cat->slug;
					$tfl_item_terms[] = $item_cat->slug;
				}

			}
			$item_classes   = implode( ' ', $item_classes );
			$tfl_item_terms = implode( ' ', $tfl_item_terms );
			?>
			<article class="<?php echo $item_classes; ?>" id="portfolio-<?php the_ID(); ?>" data-pflID="<?php the_ID(); ?>" data-terms="<?php echo $tfl_item_terms; ?>">
				<div class="inner-item-portfolio">
					<div class="info-portfolio">
						<div class="penci-portfolio-thumbnail">
							<?php if ( $lightbox != 'true' || ! function_exists( 'penci_get_featured_image_size' ) ) { ?>
							<a href="<?php the_permalink(); ?>">
								<?php } else { ?>
								<a class="penci-portfolio-open-lightbox lightbox-port-thumb" title="<?php esc_attr( the_title() ); ?>" data-rel="penci-gallery-image-content" href="<?php echo penci_get_featured_image_size( get_the_ID(), 'penci-single-full' ); ?>">
									<?php } ?>
									<?php
									if ( has_post_thumbnail() ) {

										$image_portfolio = get_the_post_thumbnail( get_the_ID(), $image_thumb );
									} else {
										$image_portfolio = '<img src="' . PENCI_PORTFOLIO_URL . '/images/no-thumbnail.jpg" alt="' . __( "No Thumbnail", "pencidesign" ) . '" />';
									}

									Penci_Portfolio::get_image_ratio( $image_portfolio );
									?>
								</a>
						</div>
						<div class="portfolio-desc">
							<a href="<?php the_permalink(); ?>">
								<h3 class="portfolio-title"><?php the_title(); ?></h3>
								<?php
								if ( 'product' != get_post_type() ) {
									$get_terms = wp_get_post_terms( get_the_ID(), $portfolio_tax, array( "fields" => "names" ) );
									$get_terms = implode( ', ', $get_terms );
								} else {
									$GLOBALS['post'] = get_post( get_the_ID() );
									setup_postdata( $GLOBALS['post'] );
									global $product;

									if ( '' === $product->get_price() ) {
										$price = apply_filters( 'woocommerce_empty_price_html', '', $product );
									} elseif ( $product->is_on_sale() ) {
										$price = wc_format_sale_price( wc_get_price_to_display( $product, array( 'price' => $product->get_regular_price() ) ), wc_get_price_to_display( $product ) ) . $product->get_price_suffix();
									} else {
										$price = wc_price( wc_get_price_to_display( $product ) ) . $product->get_price_suffix();
									}

									$get_terms = apply_filters( 'woocommerce_get_price_html', $price, $product );
								}
								if ( ! empty( $get_terms ) ):
									?>
									<span class="portfolio-cat"><?php echo $get_terms; ?></span>
								<?php endif; ?>
							</a>
						</div>
					</div>
				</div>
			</article>
		<?php endwhile;
		wp_reset_postdata();
		$content_items = ob_get_clean();
		wp_send_json_success( array( 'items' => $content_items ) );
	}
endif;
?>