/**
  * Checks if current post belongs in an excluded taxonimies
  * Returns true iff all post categories are in excluded ones
  * or all post tags are in excluded ones
  *
  * @author Panagiotis Vagenas <*****@*****.**>
  * @since 1.0.0
  */
 public function isInExcludedTaxonomies($post)
 {
     if (is_a($post, 'WP_Post')) {
         $post = $post->ID;
     }
     $exCats = $this->mainOpts->getCategories();
     if (!empty($exCats)) {
         $postCategories = get_the_category($post);
         if (is_array($postCategories) && !empty($postCategories)) {
             $catIds = array();
             foreach ($postCategories as $cat) {
                 array_push($catIds, $cat->term_id);
             }
             $intersect = array_intersect($catIds, $exCats);
             if (!empty($intersect) && count($intersect) == count($postCategories)) {
                 return TRUE;
             }
         }
     }
     $exTags = $this->mainOpts->getTags();
     if (!empty($exTags)) {
         $postTags = get_the_tags($post);
         if (is_array($postTags) && !empty($postTags)) {
             $tagsIds = array();
             foreach ($postTags as $tag) {
                 array_push($tagsIds, (string) $tag->term_id);
             }
             $intersect = array_intersect($tagsIds, $exTags);
             if (!empty($intersect) && count($intersect) == count($postTags)) {
                 return TRUE;
             }
         }
     }
     return FALSE;
 }
 /**
  * Front-end display of widget.
  *
  * @see WP_Widget::widget()
  *
  * @param array $args
  *        	Widget arguments.
  * @param array $instance
  *        	Saved values from database.
  * @since 1.0.0
  * @author Panagiotis Vagenas <*****@*****.**>
  */
 public function widget($args, $instance)
 {
     global $post;
     // get instance of main plugin
     $plugin = easyRelatedPostsPRO::get_instance();
     // check if it's time to take action
     if (!is_single($post->ID)) {
         return;
     }
     if ($plugin->isInExcludedPostTypes($post) || $plugin->isInExcludedTaxonomies($post)) {
         return;
     }
     // Fill missing options
     if (empty($instance)) {
         $instance = erpPRODefaults::$comOpts + erpPRODefaults::$widOpts;
     } else {
         $instance = $instance + erpPRODefaults::$comOpts + erpPRODefaults::$widOpts;
     }
     erpPROPaths::requireOnce(erpPROPaths::$erpProRelated);
     erpPROPaths::requireOnce(erpPROPaths::$erpPROMainOpts);
     erpPROPaths::requireOnce(erpPROPaths::$erpPROWidOpts);
     $mainOpts = new erpPROMainOpts();
     $instance['tags'] = $mainOpts->getTags();
     $instance['categories'] = $mainOpts->getCategories();
     $instance['postTypes'] = $mainOpts->getPostTypes();
     $widOpts = new erpPROWidOpts($instance);
     // Get related
     $relatedObj = erpProRelated::get_instance($widOpts);
     $wpQ = $relatedObj->getRelated($post->ID);
     // If we have some posts to show
     if (!$wpQ->have_posts()) {
         $this->displayEmptyWidget($args, $instance);
     }
     erpPROPaths::requireOnce(erpPROPaths::$VPluginThemeFactory);
     VPluginThemeFactory::registerThemeInPathRecursive(erpPROPaths::getAbsPath(erpPROPaths::$widgetThemesFolder), $instance['dsplLayout']);
     $theme = VPluginThemeFactory::getThemeByName($instance['dsplLayout'], 'widget');
     if (!$theme) {
         return $this->displayEmptyWidget($args, $instance);
     }
     $theme->setOptions($instance);
     $theme->formPostData($wpQ, $widOpts, $relatedObj->getRatingsFromRelDataObj());
     $content = $theme->renderW($this->number);
     // display rel content
     echo $args['before_widget'];
     echo $args['before_title'] . $instance['title'] . $args['after_title'];
     echo $content;
     echo $args['after_widget'];
 }