/home/edulekha/www/wp-content/plugins/favorites/app/Entities/Favorite/FavoriteFilter.php
<?php
namespace Favorites\Entities\Favorite;
/**
* Filters an array of favorites using provided array of filters
*/
class FavoriteFilter
{
/**
* Favorites
* @var array of post IDs
*/
private $favorites;
/**
* Filters
* @var array
*
* Example:
*
* array(
* 'post_type' => array('post', 'posttypetwo'),
* 'terms' => array(
* 'category' => array(
* 'termone', 'termtwo', 'termthree'
* ),
* 'other-taxonomy' => array(
* 'termone', 'termtwo', 'termthree'
* )
* )
* );
*
*/
private $filters;
public function __construct($favorites, $filters)
{
$this->favorites = $favorites;
$this->filters = $filters;
}
public function filter()
{
if ( isset($this->filters['post_type']) && is_array($this->filters['post_type']) ) $this->filterByPostType();
if ( isset($this->filters['terms']) && is_array($this->filters['terms']) ) $this->filterByTerm();
if ( isset($this->filters['status']) && is_array($this->filters['status']) ) $this->filterByStatus();
return $this->favorites;
}
/**
* Filter favorites by post type
* @since 1.1.1
* @param array $favorites
*/
private function filterByPostType()
{
foreach($this->favorites as $key => $favorite){
$post_type = get_post_type($favorite);
if ( !in_array($post_type, $this->filters['post_type']) ) unset($this->favorites[$key]);
}
}
/**
* Filter favorites by status
* @since 2.1.4
*/
private function filterByStatus()
{
foreach($this->favorites as $key => $favorite){
$status = get_post_status($favorite);
if ( !in_array($status, $this->filters['status']) ) unset($this->favorites[$key]);
}
}
/**
* Filter favorites by terms
* @since 1.1.1
* @param array $favorites
*/
private function filterByTerm()
{
$taxonomies = $this->filters['terms'];
$favorites = $this->favorites;
foreach ( $favorites as $key => $favorite ) :
$all_terms = [];
$all_filters = [];
foreach ( $taxonomies as $taxonomy => $terms ){
if ( !isset($terms) || !is_array($terms) ) continue;
$post_terms = wp_get_post_terms($favorite, $taxonomy, array("fields" => "slugs"));
if ( !empty($post_terms) ) $all_terms = array_merge($all_terms, $post_terms);
$all_filters = array_merge($all_filters, $terms);
}
$dif = array_diff($all_filters, $all_terms);
if ( !empty($dif) ) unset($favorites[$key]);
endforeach;
$this->favorites = $favorites;
}
}