4519 lines
		
	
	
		
			92 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			4519 lines
		
	
	
		
			92 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| defined('UNLIMITED_ELEMENTS_INC') or die('Restricted access');
 | |
| 
 | |
| 
 | |
| 	class UniteFunctionsWPUC{
 | |
| 
 | |
| 		public static $urlSite;
 | |
| 		public static $urlAdmin;
 | |
| 		private static $db;
 | |
| 		private static $objAcfIntegrate;
 | |
| 		private static $cacheTermCustomFields = array();
 | |
| 		private static $cacheUserCustomFields = array();
 | |
| 		private static $cacheTermParents = array();
 | |
| 
 | |
| 		private static $arrTermParentsCache = array();
 | |
| 		private static $arrTaxCache;
 | |
| 		private static $arrUrlThumbCache = array();
 | |
| 		private static $arrUrlAttachmentDataCache = array();
 | |
| 		private static $cacheAuthorsShort = null;
 | |
| 		private static $arrThumbSizesCache = null;
 | |
| 		public static $arrLastTermsArgs;
 | |
| 		public static $cachePostContent = array();
 | |
| 
 | |
| 		const SORTBY_NONE = "none";
 | |
| 		const SORTBY_ID = "ID";
 | |
| 		const SORTBY_AUTHOR = "author";
 | |
| 		const SORTBY_TITLE = "title";
 | |
| 
 | |
| 		const SORTBY_PRICE = "price";
 | |
| 		const SORTBY_SALE_PRICE = "sale_price";
 | |
| 		const SORTBY_SALES = "sales";
 | |
| 		const SORTBY_RATING = "rating";
 | |
| 
 | |
| 		const SORTBY_SLUG = "name";
 | |
| 		const SORTBY_DATE = "date";
 | |
| 		const SORTBY_LAST_MODIFIED = "modified";
 | |
| 		const SORTBY_RAND = "rand";
 | |
| 		const SORTBY_COMMENT_COUNT = "comment_count";
 | |
| 		const SORTBY_MENU_ORDER = "menu_order";
 | |
| 		const SORTBY_PARENT = "parent";
 | |
| 		const SORTBY_META_VALUE = "meta_value";
 | |
| 		const SORTBY_META_VALUE_NUM = "meta_value_num";
 | |
| 
 | |
| 		const ORDER_DIRECTION_ASC = "ASC";
 | |
| 		const ORDER_DIRECTION_DESC = "DESC";
 | |
| 
 | |
| 		const THUMB_SMALL = "thumbnail";
 | |
| 		const THUMB_MEDIUM = "medium";
 | |
| 		const THUMB_LARGE = "large";
 | |
| 		const THUMB_MEDIUM_LARGE = "medium_large";
 | |
| 		const THUMB_FULL = "full";
 | |
| 
 | |
| 		const STATE_PUBLISHED = "publish";
 | |
| 		const STATE_DRAFT = "draft";
 | |
| 
 | |
| 
 | |
| 		/**
 | |
| 		 *
 | |
| 		 * init the static variables
 | |
| 		 */
 | |
| 		public static function initStaticVars(){
 | |
| 
 | |
| 			self::$urlSite = site_url();
 | |
| 
 | |
| 			if(substr(self::$urlSite, -1) != "/")
 | |
| 				self::$urlSite .= "/";
 | |
| 
 | |
| 			self::$urlAdmin = admin_url();
 | |
| 			if(substr(self::$urlAdmin, -1) != "/")
 | |
| 				self::$urlAdmin .= "/";
 | |
| 
 | |
| 		}
 | |
| 
 | |
| 
 | |
| 		/**
 | |
| 		 * get DB
 | |
| 		 */
 | |
| 		public static function getDB(){
 | |
| 
 | |
| 			if(empty(self::$db))
 | |
| 				self::$db = new UniteCreatorDB();
 | |
| 
 | |
| 			return(self::$db);
 | |
| 		}
 | |
| 
 | |
| 		/**
 | |
| 		 * check if some db table exists
 | |
| 		 */
 | |
| 		public static function isDBTableExists($tableName){
 | |
| 
 | |
| 			global $wpdb;
 | |
| 
 | |
| 			if(empty($tableName))
 | |
| 				UniteFunctionsUC::throwError("Empty table name!!!");
 | |
| 
 | |
| 			$sql = "show tables like '$tableName'";
 | |
| 
 | |
| 			$table = $wpdb->get_var($sql);
 | |
| 
 | |
| 			if($table == $tableName)
 | |
| 				return (true);
 | |
| 
 | |
| 			return (false);
 | |
| 		}
 | |
| 
 | |
| 		/**
 | |
| 		 * add a prefix to the table name
 | |
| 		 */
 | |
| 		public static function prefixDBTable($tableName){
 | |
| 
 | |
| 			global $wpdb;
 | |
| 
 | |
| 			$tableRealName = $wpdb->prefix . $tableName;
 | |
| 
 | |
| 			return $tableRealName;
 | |
| 		}
 | |
| 
 | |
| 		/**
 | |
| 		 * get placeholders for values with the given format
 | |
| 		 */
 | |
| 		public static function getDBPlaceholders($values, $format){
 | |
| 
 | |
| 			$placeholders = array();
 | |
| 
 | |
| 			foreach($values as $value){
 | |
| 				$placeholders[] = $format;
 | |
| 			}
 | |
| 
 | |
| 			$placeholders = implode(",", $placeholders);
 | |
| 
 | |
| 			return $placeholders;
 | |
| 		}
 | |
| 
 | |
| 		/**
 | |
| 		 * process the transaction
 | |
| 		 */
 | |
| 		public static function processDBTransaction($callback){
 | |
| 
 | |
| 			global $wpdb;
 | |
| 
 | |
| 			try{
 | |
| 				$wpdb->query("START TRANSACTION");
 | |
| 
 | |
| 				$result = $callback();
 | |
| 
 | |
| 				$wpdb->query("COMMIT");
 | |
| 
 | |
| 				return $result;
 | |
| 			}catch(Exception $e){
 | |
| 				$wpdb->query("ROLLBACK");
 | |
| 
 | |
| 				throw $e;
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		/**
 | |
| 		 * get acf integrate object
 | |
| 		 */
 | |
| 		public static function getObjAcfIntegrate(){
 | |
| 
 | |
| 			if(empty(self::$objAcfIntegrate))
 | |
| 				self::$objAcfIntegrate = new UniteCreatorAcfIntegrate();
 | |
| 
 | |
| 			return(self::$objAcfIntegrate);
 | |
| 		}
 | |
| 
 | |
| 
 | |
| 		public static function a_________POSTS_TYPES________(){}
 | |
| 
 | |
| 		/**
 | |
| 		 *
 | |
| 		 * return post type title from the post type
 | |
| 		 */
 | |
| 		public static function getPostTypeTitle($postType){
 | |
| 
 | |
| 			$objType = get_post_type_object($postType);
 | |
| 
 | |
| 			if(empty($objType))
 | |
| 				return($postType);
 | |
| 
 | |
| 			$title = $objType->labels->singular_name;
 | |
| 
 | |
| 			return($title);
 | |
| 		}
 | |
| 
 | |
| 
 | |
| 		/**
 | |
| 		 *
 | |
| 		 * get post type taxomonies
 | |
| 		 */
 | |
| 		public static function getPostTypeTaxomonies($postType){
 | |
| 
 | |
| 			$arrTaxonomies = get_object_taxonomies(array( 'post_type' => $postType ), 'objects');
 | |
| 
 | |
| 			$arrNames = array();
 | |
| 			foreach($arrTaxonomies as $key=>$objTax){
 | |
| 				$name = $objTax->labels->singular_name;
 | |
| 				if(empty($name))
 | |
| 					$name = $objTax->labels->name;
 | |
| 
 | |
| 				$arrNames[$objTax->name] = $objTax->labels->singular_name;
 | |
| 			}
 | |
| 
 | |
| 			return($arrNames);
 | |
| 		}
 | |
| 
 | |
| 		/**
 | |
| 		 * get post edit link with elementor
 | |
| 		 */
 | |
| 		public static function getPostEditLink_editWithElementor($postID){
 | |
| 
 | |
| 			$urlAdmin = admin_url("post.php");
 | |
| 			$urlAdmin .= "?post=$postID&action=elementor";
 | |
| 
 | |
| 			return($urlAdmin);
 | |
| 		}
 | |
| 
 | |
| 		/**
 | |
| 		 *
 | |
| 		 * get post types taxonomies as string
 | |
| 		 */
 | |
| 		public static function getPostTypeTaxonomiesString($postType){
 | |
| 			$arrTax = self::getPostTypeTaxomonies($postType);
 | |
| 			$strTax = "";
 | |
| 			foreach($arrTax as $name=>$title){
 | |
| 				if(!empty($strTax))
 | |
| 					$strTax .= ",";
 | |
| 				$strTax .= $name;
 | |
| 			}
 | |
| 
 | |
| 			return($strTax);
 | |
| 		}
 | |
| 
 | |
| 		/**
 | |
| 		 *
 | |
| 		 * get post types array with taxomonies
 | |
| 		 */
 | |
| 		public static function getPostTypesWithTaxomonies($filterPostTypes = array(), $fetchWithNoTax = true){
 | |
| 
 | |
| 			$arrPostTypes = self::getPostTypesAssoc();
 | |
| 
 | |
| 			$arrPostTypesOutput = array();
 | |
| 
 | |
| 			foreach($arrPostTypes as $postType => $title){
 | |
| 
 | |
| 				if(array_key_exists($postType, $filterPostTypes) == true)
 | |
| 					continue;
 | |
| 
 | |
| 				$arrTaxomonies = self::getPostTypeTaxomonies($postType);
 | |
| 
 | |
| 				if($fetchWithNoTax == false && empty($arrTaxomonies))
 | |
| 					continue;
 | |
| 
 | |
| 				$arrType = array();
 | |
| 				$arrType["title"] = $title;
 | |
| 				$arrType["taxonomies"] = $arrTaxomonies;
 | |
| 
 | |
| 				$arrPostTypesOutput[$postType] = $arrType;
 | |
| 			}
 | |
| 
 | |
| 
 | |
| 			return($arrPostTypesOutput);
 | |
| 		}
 | |
| 
 | |
| 
 | |
| 		/**
 | |
| 		 *
 | |
| 		 * get array of post types with categories (the taxonomies is between).
 | |
| 		 * get only those taxomonies that have some categories in it.
 | |
| 		 */
 | |
| 		public static function getPostTypesWithCats($arrFilterTypes = null){
 | |
| 
 | |
| 			$arrPostTypes = self::getPostTypesWithTaxomonies();
 | |
| 
 | |
| 			$arrOutput = array();
 | |
| 			foreach($arrPostTypes as $name => $arrPostType){
 | |
| 
 | |
| 				if(array_key_exists($name, $arrFilterTypes) == true)
 | |
| 					continue;
 | |
| 
 | |
| 				$arrTax = UniteFunctionsUC::getVal($arrPostType, "taxonomies");
 | |
| 
 | |
| 
 | |
| 				//collect categories
 | |
| 				$arrCats = array();
 | |
| 				foreach($arrTax as $taxName => $taxTitle){
 | |
| 
 | |
| 					$cats = self::getCategoriesAssoc($taxName, false, $name);
 | |
| 
 | |
| 					if(!empty($cats))
 | |
| 					foreach($cats as $catID=>$catTitle){
 | |
| 
 | |
| 						if($taxName != "category"){
 | |
| 							$catID = $taxName."--".$catID;
 | |
| 							$catTitle = $catTitle." - [$taxTitle]";
 | |
| 						}
 | |
| 
 | |
| 						$arrCats[$catID] = $catTitle;
 | |
| 					}
 | |
| 				}
 | |
| 
 | |
| 				$arrPostType = array();
 | |
| 				$arrPostType["name"] = $name;
 | |
| 				$arrPostType["title"] = self::getPostTypeTitle($name);
 | |
| 				$arrPostType["cats"] = $arrCats;
 | |
| 
 | |
| 				$arrOutput[$name] = $arrPostType;
 | |
| 			}
 | |
| 
 | |
| 
 | |
| 			return($arrOutput);
 | |
| 		}
 | |
| 
 | |
| 
 | |
| 		/**
 | |
| 		 *
 | |
| 		 * get array of post types with categories (the taxonomies is between).
 | |
| 		 * get only those taxomonies that have some categories in it.
 | |
| 		 */
 | |
| 		public static function getPostTypesWithCatIDs(){
 | |
| 
 | |
| 			$arrTypes = self::getPostTypesWithCats();
 | |
| 
 | |
| 			$arrOutput = array();
 | |
| 
 | |
| 			foreach($arrTypes as $typeName => $arrType){
 | |
| 
 | |
| 				$output = array();
 | |
| 				$output["name"] = $typeName;
 | |
| 
 | |
| 				$typeTitle = self::getPostTypeTitle($typeName);
 | |
| 
 | |
| 				//collect categories
 | |
| 				$arrCatsTotal = array();
 | |
| 
 | |
| 				foreach($arrType as $arr){
 | |
| 					$cats = UniteFunctionsUC::getVal($arr, "cats");
 | |
| 					$catsIDs = array_keys($cats);
 | |
| 					$arrCatsTotal = array_merge($arrCatsTotal, $catsIDs);
 | |
| 				}
 | |
| 
 | |
| 				$output["title"] = $typeTitle;
 | |
| 				$output["catids"] = $arrCatsTotal;
 | |
| 
 | |
| 				$arrOutput[$typeName] = $output;
 | |
| 			}
 | |
| 
 | |
| 
 | |
| 			return($arrOutput);
 | |
| 		}
 | |
| 
 | |
| 
 | |
| 
 | |
| 		/**
 | |
| 		 *
 | |
| 		 * get all the post types including custom ones
 | |
| 		 * the put to top items will be always in top (they must be in the list)
 | |
| 		 */
 | |
| 		public static function getPostTypesAssoc($arrPutToTop = array(), $isPublicOnly = false){
 | |
| 
 | |
| 			$arrBuiltIn = array(
 | |
| 			 	"post"=>"post",
 | |
| 			 	"page"=>"page",
 | |
| 			 	"attachment"=>"attachment",
 | |
| 			 );
 | |
| 
 | |
| 			 $arrCustomTypes = get_post_types(array('_builtin' => false));
 | |
| 
 | |
| 
 | |
| 			 //top items validation - add only items that in the customtypes list
 | |
| 			 $arrPutToTopUpdated = array();
 | |
| 			 foreach($arrPutToTop as $topItem){
 | |
| 			 	if(in_array($topItem, $arrCustomTypes) == true){
 | |
| 			 		$arrPutToTopUpdated[$topItem] = $topItem;
 | |
| 			 		unset($arrCustomTypes[$topItem]);
 | |
| 			 	}
 | |
| 			 }
 | |
| 
 | |
| 			 $arrPostTypes = array_merge($arrPutToTopUpdated,$arrBuiltIn,$arrCustomTypes);
 | |
| 
 | |
| 			 //update label
 | |
| 			 foreach($arrPostTypes as $key=>$type){
 | |
| 				$arrPostTypes[$key] = self::getPostTypeTitle($type);
 | |
| 			 }
 | |
| 
 | |
| 			 //filter public only types
 | |
| 			 if($isPublicOnly == true)
 | |
| 			 	$arrPostTypes = self::filterPublicOnlyTypes($arrPostTypes);
 | |
| 
 | |
| 
 | |
| 			 return($arrPostTypes);
 | |
| 		}
 | |
| 
 | |
| 
 | |
| 		/**
 | |
| 		 * get public only types from post types array
 | |
| 		 */
 | |
| 		public static function filterPublicOnlyTypes($arrPostTypes){
 | |
| 
 | |
| 			if(empty($arrPostTypes))
 | |
| 				return($arrPostTypes);
 | |
| 
 | |
| 			foreach($arrPostTypes as $type => $typeTitle){
 | |
| 
 | |
| 				if($type == "post" || $type == "page"){
 | |
| 					continue;
 | |
| 				}
 | |
| 
 | |
| 				$objType = get_post_type_object($type);
 | |
| 
 | |
| 				if(empty($objType))
 | |
| 					continue;
 | |
| 
 | |
| 				if($objType->publicly_queryable == false)
 | |
| 					unset($arrPostTypes[$type]);
 | |
| 			}
 | |
| 
 | |
| 			return($arrPostTypes);
 | |
| 		}
 | |
| 
 | |
| 		/**
 | |
| 		 * check if has post type
 | |
| 		 */
 | |
| 		public static function hasPostType($type){
 | |
| 
 | |
| 			$arrTypes = self::getPostTypesAssoc();
 | |
| 
 | |
| 			if(isset($arrTypes[$type]))
 | |
| 				return(true);
 | |
| 
 | |
| 			return(false);
 | |
| 		}
 | |
| 		
 | |
| 		public static function a_______TERMS_______(){}
 | |
| 		
 | |
| 		
 | |
| 		/**
 | |
| 		 * sort terms by parents by levels parent -> children / parent -> children
 | |
| 		 */
 | |
| 		public static function sortTermsByParents($arrTermsObjects, $parent = 0, $level = 0){
 | |
| 			
 | |
| 			if(empty($arrTermsObjects))
 | |
| 				return(array());
 | |
| 			
 | |
| 			$arrSorted = array();
 | |
| 			
 | |
| 		    foreach ($arrTermsObjects as $term) {
 | |
| 		    	
 | |
| 		        if ($term->parent != $parent) 
 | |
| 		        	continue; 
 | |
| 		        	
 | |
| 		        $term->level = $level;
 | |
| 		        
 | |
| 	            $arrSorted[] = $term;
 | |
| 	            
 | |
| 	            $arrChildren = self::sortTermsByParents($arrTermsObjects, $term->term_id, $level+1 );
 | |
| 	            $arrSorted = array_merge($arrSorted, $arrChildren);
 | |
| 		    }
 | |
| 			
 | |
| 		    
 | |
| 			return($arrSorted);
 | |
| 		}
 | |
| 		
 | |
| 		
 | |
| 		/**
 | |
| 		 * get term parent ids, including current term id
 | |
| 		 */
 | |
| 		public static function getTermParentIDs($objTerm){
 | |
| 			
 | |
| 			$currentTermID = $objTerm->term_id;
 | |
| 
 | |
| 			$cacheKey = "term_".$currentTermID;
 | |
| 
 | |
| 			if(isset(self::$cacheTermParents[$cacheKey]))
 | |
| 				return(self::$cacheTermParents[$cacheKey]);
 | |
| 
 | |
| 			$arrCurrentIDs = array($currentTermID);
 | |
| 
 | |
| 			if(!isset($objTerm->parent) || $objTerm->parent === 0){
 | |
| 				self::$cacheTermParents[$cacheKey] = $arrCurrentIDs;
 | |
| 				return($arrCurrentIDs);
 | |
| 			}
 | |
| 
 | |
| 			$parents = get_ancestors( $currentTermID, $objTerm->taxonomy, 'taxonomy' );
 | |
| 			if(!empty($parents))
 | |
| 				$arrCurrentIDs = array_merge($arrCurrentIDs, $parents);
 | |
| 
 | |
| 			self::$cacheTermParents[$cacheKey] = $arrCurrentIDs;
 | |
| 
 | |
| 			return($arrCurrentIDs);
 | |
| 		}
 | |
| 
 | |
| 		/**
 | |
| 		 * get term by slug
 | |
| 		 */
 | |
| 		public static function getTermBySlug($taxonomy, $slug){
 | |
| 
 | |
| 			$args = array();
 | |
| 			$args["slug"] = $slug;
 | |
| 			$args["taxonomy"] = $taxonomy;
 | |
| 			$args["hide_empty"] = false;
 | |
| 
 | |
| 			$arrTerms = get_terms($args);
 | |
| 
 | |
| 			if(empty($arrTerms))
 | |
| 				return(null);
 | |
| 
 | |
| 			$term = $arrTerms[0];
 | |
| 
 | |
| 			return($term);
 | |
| 		}
 | |
| 
 | |
| 
 | |
| 		/**
 | |
| 		 * get term data
 | |
| 		 */
 | |
| 		public static function getTermData($term){
 | |
| 
 | |
| 			$data = array();
 | |
| 			$data["term_id"] = $term->term_id;
 | |
| 			$data["name"] = $term->name;
 | |
| 			$data["slug"] = $term->slug;
 | |
| 			$data["description"] = $term->description;
 | |
| 			$data["taxonomy"] = $term->taxonomy;
 | |
| 			
 | |
| 			if(isset($term->parent))
 | |
| 				$data["parent_id"] = $term->parent;
 | |
| 
 | |
| 			$count = "";
 | |
| 
 | |
| 			if(isset($term->count))
 | |
| 				$count = $term->count;
 | |
| 
 | |
| 			$data["count"] = $count;
 | |
| 
 | |
| 			//get link
 | |
| 			$link = get_term_link($term);
 | |
| 			$data["link"] = $link;
 | |
| 			
 | |
| 			//level (custom attribute after sorting)
 | |
| 			
 | |
| 			if(property_exists($term,"level"))			
 | |
| 				$data["level"] = $term->level;
 | |
| 			
 | |
| 			
 | |
| 			return($data);
 | |
| 		}
 | |
| 
 | |
| 		/**
 | |
| 		 * convert terms objects to data
 | |
| 		 */
 | |
| 		public static function getTermsObjectsData($arrTerms, $taxonomyName, $currentTermID = null){
 | |
| 
 | |
| 			if(empty($currentTermID))
 | |
| 				$currentTermID = self::getCurrentTermID();
 | |
| 
 | |
| 			$arrTermData = array();
 | |
| 
 | |
| 			if(empty($arrTerms))
 | |
| 				return(array());
 | |
| 
 | |
| 			$counter = 0;
 | |
| 			foreach($arrTerms as $term){
 | |
| 
 | |
| 				$termData = self::getTermData($term);
 | |
| 
 | |
| 				$current = false;
 | |
| 				if($termData["term_id"] == $currentTermID)
 | |
| 					$current = true;
 | |
| 
 | |
| 				$termData["iscurrent"] = $current;
 | |
| 
 | |
| 				$slug = $termData["slug"];
 | |
| 				if(empty($slug))
 | |
| 					$slug = "{$taxonomyName}_{$counter}";
 | |
| 
 | |
| 				$arrTermData[$slug] = $termData;
 | |
| 			}
 | |
| 
 | |
| 			return($arrTermData);
 | |
| 		}
 | |
| 
 | |
| 		/**
 | |
| 		 * get current term ID
 | |
| 		 */
 | |
| 		public static function getCurrentTermID(){
 | |
| 
 | |
| 			$term = get_queried_object();
 | |
| 			if(empty($term))
 | |
| 				return(null);
 | |
| 
 | |
| 			if(!isset($term->term_id))
 | |
| 				return(null);
 | |
| 
 | |
| 			return($term->term_id);
 | |
| 		}
 | |
| 
 | |
| 		/**
 | |
| 		 * filter term objects by slugs
 | |
| 		 */
 | |
| 		public static function getTerms_filterBySlugs($arrTermObjects, $arrSlugs){
 | |
| 
 | |
| 			if(empty($arrTermObjects))
 | |
| 				return($arrTermObjects);
 | |
| 
 | |
| 			$arrSlugsAssoc = UniteFunctionsUC::arrayToAssoc($arrSlugs);
 | |
| 			$arrTermsNew = array();
 | |
| 			foreach($arrTermObjects as $term){
 | |
| 
 | |
| 				if(isset($arrSlugsAssoc[$term->slug]))
 | |
| 					continue;
 | |
| 
 | |
| 				$arrTermsNew[] = $term;
 | |
| 			}
 | |
| 
 | |
| 
 | |
| 			return($arrTermsNew);
 | |
| 		}
 | |
| 
 | |
| 		/**
 | |
| 		 * get terms arguments
 | |
| 		 */
 | |
| 		public static function getTermsArgs($taxonomy, $orderBy = null, $orderDir = null, $hideEmpty = false, $addArgs = null){
 | |
| 
 | |
| 			$hideEmpty = UniteFunctionsUC::strToBool($hideEmpty);
 | |
| 
 | |
| 			$args = array();
 | |
| 			$args["hide_empty"] = $hideEmpty;
 | |
| 			$args["taxonomy"] = $taxonomy;
 | |
| 			$args["count"] = true;
 | |
| 			$args["number"] = 5000;
 | |
| 
 | |
| 			if(!empty($orderBy)){
 | |
| 				$args["orderby"] = $orderBy;
 | |
| 
 | |
| 				if(empty($orderDir))
 | |
| 					$orderDir = self::ORDER_DIRECTION_ASC;
 | |
| 
 | |
| 				$args["order"] = $orderDir;
 | |
| 			}
 | |
| 
 | |
| 			if(is_array($addArgs))
 | |
| 				$args = $args + $addArgs;
 | |
| 
 | |
| 			self::$arrLastTermsArgs = $args;
 | |
| 
 | |
| 			return($args);
 | |
| 		}
 | |
| 
 | |
| 		/**
 | |
| 		 * get terms
 | |
| 		 */
 | |
| 		public static function getTerms($taxonomy, $orderBy = null, $orderDir = null, $hideEmpty = false, $arrExcludeSlugs = null, $addArgs = null){
 | |
| 			
 | |
| 			$currentTermID = self::getCurrentTermID();
 | |
| 
 | |
| 			$args = self::getTermsArgs($taxonomy, $orderBy, $orderDir, $hideEmpty, $addArgs);
 | |
| 
 | |
| 			HelperUC::addDebug("Terms Query", $args);
 | |
| 
 | |
| 			$arrTermsObjects = get_terms($args);
 | |
| 
 | |
| 			if(is_wp_error($arrTermsObjects)){
 | |
| 
 | |
| 				$errorMessage = "getTerms error: taxonomy: $taxonomy |". $arrTermsObjects->get_error_message();
 | |
| 				UniteFunctionsUC::throwError($errorMessage);
 | |
| 			}
 | |
| 
 | |
| 
 | |
| 			if(!empty($arrExcludeSlugs)){
 | |
| 				HelperUC::addDebug("Terms Before Filter:", $arrTermsObjects);
 | |
| 				HelperUC::addDebug("Exclude by:", $arrExcludeSlugs);
 | |
| 			}
 | |
| 
 | |
| 			if(!empty($arrExcludeSlugs) && is_array($arrExcludeSlugs))
 | |
| 				$arrTermsObjects = self::getTerms_filterBySlugs($arrTermsObjects, $arrExcludeSlugs);
 | |
| 
 | |
| 
 | |
| 			$arrTerms = self::getTermsObjectsData($arrTermsObjects, $taxonomy, $currentTermID);
 | |
| 
 | |
| 			return($arrTerms);
 | |
| 
 | |
| 		}
 | |
| 
 | |
| 		/**
 | |
| 		 * get specific terms
 | |
| 		 */
 | |
| 		public static function getSpecificTerms($slugs, $taxonomy){
 | |
| 
 | |
| 			$currentTermID = self::getCurrentTermID();
 | |
| 
 | |
| 			if(is_string($slugs)){
 | |
| 
 | |
| 				$slugs = trim($slugs);
 | |
| 				if(empty($slugs))
 | |
| 					return(array());
 | |
| 
 | |
| 				$slugs = explode(",", $slugs);
 | |
| 			}
 | |
| 
 | |
| 			if(!is_array($slugs))
 | |
| 				return(array());
 | |
| 
 | |
| 			if(empty($slugs))
 | |
| 				return(array());
 | |
| 
 | |
| 			$args = array();
 | |
| 			$args["slug"] = $slugs;
 | |
| 
 | |
| 			HelperUC::addDebug("Terms Args", $args);
 | |
| 
 | |
| 			$arrTermsObjects = get_terms($args);
 | |
| 
 | |
| 			$arrTerms = self::getTermsObjectsData($arrTermsObjects, $taxonomy, $currentTermID);
 | |
| 
 | |
| 			return($arrTerms);
 | |
| 		}
 | |
| 
 | |
| 
 | |
| 		/**
 | |
| 		 * get all post terms
 | |
| 		 */
 | |
| 		public static function getPostAllSingleTerms($postID){
 | |
| 
 | |
| 			if(is_numeric($postID) == true)
 | |
| 				$post = get_post($postID);
 | |
| 			else
 | |
| 				$post = $postID;
 | |
| 
 | |
| 			$postType = $post->post_type;
 | |
| 
 | |
| 			$arrTaxonomies = self::getPostTypeTaxomonies($postType);
 | |
| 
 | |
| 			if(empty($arrTaxonomies))
 | |
| 				return(array());
 | |
| 
 | |
| 			$arrAllTerms = array();
 | |
| 
 | |
| 			foreach($arrTaxonomies as $taxName => $taxTitle){
 | |
| 
 | |
| 				$arrTerms = self::getPostSingleTerms($postID, $taxName);
 | |
| 
 | |
| 				if(empty($arrTerms))
 | |
| 					continue;
 | |
| 
 | |
| 				$arrAllTerms += $arrTerms;
 | |
| 			}
 | |
| 
 | |
| 
 | |
| 			return($arrAllTerms);
 | |
| 		}
 | |
| 
 | |
| 
 | |
| 		/**
 | |
| 		 * get post single taxonomy terms
 | |
| 		 */
 | |
| 		public static function getPostSingleTerms($postID, $taxonomyName){
 | |
| 
 | |
| 			//check from cache
 | |
| 			if(isset(GlobalsProviderUC::$arrPostTermsCache[$postID][$taxonomyName])){
 | |
| 
 | |
| 				$arrTerms = GlobalsProviderUC::$arrPostTermsCache[$postID][$taxonomyName];
 | |
| 
 | |
| 				$arrTerms = array_values($arrTerms);
 | |
| 			}else{
 | |
| 
 | |
| 				$arrTerms = wp_get_post_terms($postID, $taxonomyName);
 | |
| 
 | |
| 				if(is_wp_error($arrTerms)){
 | |
| 
 | |
| 					$errorMessage = "get terms error: post: $postID , tax: $taxonomyName |". $arrTerms->get_error_message();
 | |
| 					UniteFunctionsUC::throwError($errorMessage);
 | |
| 				}
 | |
| 
 | |
| 			}
 | |
| 
 | |
| 			$arrTerms = self::getTermsObjectsData($arrTerms, $taxonomyName);
 | |
| 
 | |
| 			return($arrTerms);
 | |
| 		}
 | |
| 
 | |
| 		/**
 | |
| 		 * get post single taxonomy terms
 | |
| 		 */
 | |
| 		public static function getPostSingleTermsTitles($postID, $taxonomyName){
 | |
| 
 | |
| 			$arrTerms = self::getPostSingleTerms($postID, $taxonomyName);
 | |
| 			if(empty($arrTerms))
 | |
| 				return(array());
 | |
| 
 | |
| 			$output = UniteFunctionsUC::assocToArrayNames($arrTerms, "name");
 | |
| 
 | |
| 			return($output);
 | |
| 		}
 | |
| 
 | |
| 
 | |
| 		/**
 | |
| 		 * get post terms with all taxonomies
 | |
| 		 */
 | |
| 		public static function getPostTerms($post){
 | |
| 
 | |
| 			if(empty($post))
 | |
| 				return(array());
 | |
| 
 | |
| 			$postType = $post->post_type;
 | |
| 			$postID = $post->ID;
 | |
| 
 | |
| 			if(empty($postID))
 | |
| 				return(array());
 | |
| 
 | |
| 			//option 'objects' also available
 | |
| 			$arrTaxonomies = self::getPostTypeTaxomonies($postType);
 | |
| 
 | |
| 			if(empty($arrTaxonomies))
 | |
| 				return(array());
 | |
| 
 | |
| 			$arrDataOutput = array();
 | |
| 
 | |
| 			foreach($arrTaxonomies as $taxName => $taxTitle){
 | |
| 
 | |
| 				$arrTerms = wp_get_post_terms($postID, $taxName);
 | |
| 
 | |
| 				$arrTermsData = self::getTermsObjectsData($arrTerms, $taxName);
 | |
| 
 | |
| 				$arrDataOutput[$taxName] = $arrTermsData;
 | |
| 			}
 | |
| 
 | |
| 
 | |
| 			return($arrDataOutput);
 | |
| 		}
 | |
| 
 | |
| 		/**
 | |
| 		 * get post term
 | |
| 		 */
 | |
| 		public static function getPostTerm($postID, $taxName, $termSlug){
 | |
| 
 | |
| 			$arrTerms = wp_get_post_terms($postID, $taxName);
 | |
| 
 | |
| 			if(empty($arrTerms))
 | |
| 				return(null);
 | |
| 
 | |
| 			foreach($arrTerms as $term){
 | |
| 
 | |
| 				$slug = $term->slug;
 | |
| 
 | |
| 				if($slug != $termSlug)
 | |
| 					continue;
 | |
| 
 | |
| 				$termData = self::getTermData($term);
 | |
| 
 | |
| 				return($termData);
 | |
| 			}
 | |
| 
 | |
| 			return(null);
 | |
| 		}
 | |
| 
 | |
| 		/**
 | |
| 		 * get post terms title string
 | |
| 		 */
 | |
| 		public static function getPostTermsTitlesString($post, $withTax = false){
 | |
| 
 | |
| 			if(is_numeric($post))
 | |
| 				$post = get_post($post);
 | |
| 
 | |
| 			$arrTerms = self::getPostTermsTitles($post, $withTax);
 | |
| 
 | |
| 			if(empty($arrTerms))
 | |
| 				return("");
 | |
| 
 | |
| 			$strTerms = implode(", ", $arrTerms);
 | |
| 
 | |
| 			return($strTerms);
 | |
| 		}
 | |
| 
 | |
| 		/**
 | |
| 		 * get post terms titles
 | |
| 		 */
 | |
| 		public static function getPostTermsTitles($post, $withTax = false){
 | |
| 
 | |
| 			$arrTermsWithTax = self::getPostTerms($post);
 | |
| 
 | |
| 			if(empty($arrTermsWithTax))
 | |
| 				return(array());
 | |
| 
 | |
| 			$arrTitles = array();
 | |
| 
 | |
| 			foreach($arrTermsWithTax as $taxanomy=>$arrTerms){
 | |
| 
 | |
| 				if(empty($arrTerms))
 | |
| 					continue;
 | |
| 
 | |
| 				foreach($arrTerms as $term){
 | |
| 
 | |
| 					$name = UniteFunctionsUC::getVal($term, "name");
 | |
| 
 | |
| 					if($withTax == true){
 | |
| 						$taxonomy = UniteFunctionsUC::getVal($term, "taxonomy");
 | |
| 
 | |
| 						if(!empty($taxanomy) && $taxanomy != "category")
 | |
| 							$name .= "($taxanomy)";
 | |
| 					}
 | |
| 
 | |
| 					if(empty($name))
 | |
| 						continue;
 | |
| 
 | |
| 					$arrTitles[] = $name;
 | |
| 				}
 | |
| 			}
 | |
| 
 | |
| 			return($arrTitles);
 | |
| 		}
 | |
| 
 | |
| 		/**
 | |
| 		 * get post terms id's
 | |
| 		 * if empty - get current post term id's
 | |
| 		 */
 | |
| 		public static function getPostTermIDs($post = null){
 | |
| 
 | |
| 			if(empty($post))
 | |
| 				$post = get_post();
 | |
| 
 | |
| 			if(empty($post))
 | |
| 				return(array());
 | |
| 
 | |
| 			$arrTermsWithTax = self::getPostTerms($post);
 | |
| 
 | |
| 			if(empty($arrTermsWithTax))
 | |
| 				return(array());
 | |
| 
 | |
| 			$arrTermIDs = array();
 | |
| 
 | |
| 			foreach($arrTermsWithTax as $terms){
 | |
| 
 | |
| 				if(empty($terms))
 | |
| 					continue;
 | |
| 
 | |
| 				foreach($terms as $term){
 | |
| 					$termID = UniteFunctionsUC::getVal($term, "term_id");
 | |
| 					$arrTermIDs[] = $termID;
 | |
| 				}
 | |
| 
 | |
| 			}
 | |
| 
 | |
| 			return($arrTermIDs);
 | |
| 		}
 | |
| 		
 | |
| 		
 | |
| 		public static function a_______TAXANOMIES_______(){}
 | |
| 
 | |
| 
 | |
| 
 | |
| 		/**
 | |
| 		 *
 | |
| 		 * get assoc list of the taxonomies
 | |
| 		 */
 | |
| 		public static function getTaxonomiesAssoc(){
 | |
| 
 | |
| 			$arr = get_taxonomies();
 | |
| 
 | |
| 			unset($arr["post_tag"]);
 | |
| 			unset($arr["nav_menu"]);
 | |
| 			unset($arr["link_category"]);
 | |
| 			unset($arr["post_format"]);
 | |
| 
 | |
| 			return($arr);
 | |
| 		}
 | |
| 
 | |
| 		/**
 | |
| 		 * get all tax assoc
 | |
| 		 */
 | |
| 		public static function getAllTaxonomiesAssoc(){
 | |
| 
 | |
| 			$arr = get_taxonomies();
 | |
| 
 | |
| 			return($arr);
 | |
| 		}
 | |
| 
 | |
| 		/**
 | |
| 		 *
 | |
| 		 * get array of all taxonomies with categories.
 | |
| 		 */
 | |
| 		public static function getTaxonomiesWithCats(){
 | |
| 
 | |
| 			if(!empty(self::$arrTaxCache))
 | |
| 				return(self::$arrTaxCache);
 | |
| 
 | |
| 			$arrTax = self::getTaxonomiesAssoc();
 | |
| 
 | |
| 			$arrTaxNew = array();
 | |
| 			foreach($arrTax as $key => $value){
 | |
| 
 | |
| 				$arrItem = array();
 | |
| 				$arrItem["name"] = $key;
 | |
| 				$arrItem["title"] = $value;
 | |
| 				$arrItem["cats"] = self::getCategoriesAssoc($key);
 | |
| 				$arrTaxNew[$key] = $arrItem;
 | |
| 			}
 | |
| 
 | |
| 			self::$arrTaxCache = $arrTaxNew;
 | |
| 
 | |
| 			return($arrTaxNew);
 | |
| 		}
 | |
| 
 | |
| 		/**
 | |
| 		 * update terms counts (indexes)
 | |
| 		 */
 | |
| 		public static function updateTermsIndexes(){
 | |
| 
 | |
| 			$db = HelperUC::getDB();
 | |
| 
 | |
| 			$tableTerms = GlobalsUC::$table_prefix."term_taxonomy";
 | |
| 
 | |
| 			$arrTerms = $db->fetch($tableTerms);
 | |
| 
 | |
| 			$arrTax = array();
 | |
| 
 | |
| 			foreach($arrTerms as $term){
 | |
| 
 | |
| 				$termID = UniteFunctionsUC::getVal($term, "term_id");
 | |
| 				$taxonomy = UniteFunctionsUC::getVal($term, "taxonomy");
 | |
| 
 | |
| 				if(strpos($taxonomy, "translation_") !== false)
 | |
| 					continue;
 | |
| 
 | |
| 				if(strpos($taxonomy, "elementor_") !== false)
 | |
| 					continue;
 | |
| 
 | |
| 				if(!isset($arrTax[$taxonomy]))
 | |
| 					$arrTax[$taxonomy] = array();
 | |
| 
 | |
| 				$arrTax[$taxonomy][] = $termID;
 | |
| 			}
 | |
| 
 | |
| 			//do the update count
 | |
| 			foreach($arrTax as $taxonomy=>$arrTerms){
 | |
| 				@wp_update_term_count_now( $arrTerms, $taxonomy);
 | |
| 			}
 | |
| 
 | |
| 		}
 | |
| 
 | |
| 	/**
 | |
| 	 * get current tax query
 | |
| 	 */
 | |
| 	public static function getCurrentPageTaxQuery(){
 | |
| 
 | |
| 		global $wp_query;
 | |
| 
 | |
| 		if(empty($wp_query))
 | |
| 			return(null);
 | |
| 
 | |
| 		$taxQuery = $wp_query->tax_query;
 | |
| 
 | |
| 		if(empty($taxQuery))
 | |
| 			return(null);
 | |
| 
 | |
| 		$queries = $taxQuery->queries;
 | |
| 
 | |
| 		if(empty($queries))
 | |
| 			return(null);
 | |
| 
 | |
| 		return($queries);
 | |
| 	}
 | |
| 
 | |
| 
 | |
| 
 | |
| 	/**
 | |
| 	 * set arguments tax query, merge with existing if avaliable
 | |
| 	 */
 | |
| 	public static function mergeArgsTaxQuery($args, $arrTaxQuery){
 | |
| 
 | |
| 		if(empty($arrTaxQuery))
 | |
| 			return ($args);
 | |
| 
 | |
| 		$existingTaxQuery = UniteFunctionsUC::getVal($args, "tax_query");
 | |
| 
 | |
| 		if(empty($existingTaxQuery)){
 | |
| 			$args["tax_query"] = $arrTaxQuery;
 | |
| 
 | |
| 			return ($args);
 | |
| 		}
 | |
| 
 | |
| 		$newTaxQuery = array(
 | |
| 			$existingTaxQuery,
 | |
| 			$arrTaxQuery
 | |
| 		);
 | |
| 
 | |
| 		$newTaxQuery["relation"] = "AND";
 | |
| 
 | |
| 		$args["tax_query"] = $newTaxQuery;
 | |
| 
 | |
| 		return ($args);
 | |
| 	}
 | |
| 
 | |
| 
 | |
| 		public static function a_________TAXONOMY_LEVELS___________(){}
 | |
| 
 | |
| 		/**
 | |
| 		 * filter last level terms only from terms list
 | |
| 		 */
 | |
| 		public static function filterTermsLastLevel($arrTerms, $taxonomy){
 | |
| 
 | |
| 			if(empty($arrTerms))
 | |
| 				return($arrTerms);
 | |
| 
 | |
| 			if(count($arrTerms) == 1)
 | |
| 				return($arrTerms);
 | |
| 
 | |
| 			//get parents list
 | |
| 			$arrParents = array();
 | |
| 			foreach($arrTerms as $term){
 | |
| 
 | |
| 				$parentID = UniteFunctionsUC::getVal($term, "parent_id");
 | |
| 
 | |
| 				$arrParents["term_".$parentID] = true;
 | |
| 
 | |
| 			}
 | |
| 
 | |
| 			//same parent
 | |
| 
 | |
| 			if(count($arrParents) == 1)
 | |
| 				return($arrTerms);
 | |
| 
 | |
| 			//return not main if main exists, and there is only 2
 | |
| 
 | |
| 			$mainTerm = UniteFunctionsUC::getVal($arrParents, "term_0");
 | |
| 
 | |
| 			if(count($arrParents) == 2 && !empty($mainTerm)){
 | |
| 
 | |
| 				$arrOutput = array();
 | |
| 
 | |
| 				foreach($arrTerms as $term){
 | |
| 					$parentID = UniteFunctionsUC::getVal($term, "parent_id");
 | |
| 
 | |
| 					if(empty($parentID))
 | |
| 						continue;
 | |
| 
 | |
| 					$arrOutput[] = $term;
 | |
| 				}
 | |
| 
 | |
| 				return($arrOutput);
 | |
| 			}
 | |
| 
 | |
| 			//get by hierarchy
 | |
| 
 | |
| 			$arrTerms = self::addTermsLevels($arrTerms, $taxonomy);
 | |
| 
 | |
| 			//find max level
 | |
| 
 | |
| 			$maxLevel = 0;
 | |
| 			foreach($arrTerms as $term){
 | |
| 
 | |
| 				$level = UniteFunctionsUC::getVal($term, "level");
 | |
| 
 | |
| 				if($level > $maxLevel)
 | |
| 					$maxLevel = $level;
 | |
| 			}
 | |
| 
 | |
| 
 | |
| 			//filter by last only
 | |
| 			$arrOutput = array();
 | |
| 
 | |
| 			foreach($arrTerms as $term){
 | |
| 
 | |
| 				$level = UniteFunctionsUC::getVal($term, "level");
 | |
| 
 | |
| 				if($level == $maxLevel)
 | |
| 					$arrOutput[] = $term;
 | |
| 			}
 | |
| 
 | |
| 
 | |
| 			return($arrOutput);
 | |
| 		}
 | |
| 
 | |
| 
 | |
| 		/**
 | |
| 		 * add levels to terms
 | |
| 		 */
 | |
| 		public static function addTermsLevels($arrTerms, $taxonomy){
 | |
| 
 | |
| 			//add level to terms
 | |
| 			$arrParentIDs = self::getTermsIDsWithParentIDs($taxonomy);
 | |
| 
 | |
| 			foreach($arrTerms as $key=>$term){
 | |
| 
 | |
| 				$termID = UniteFunctionsUC::getVal($term, "term_id");
 | |
| 
 | |
| 				$level = self::getTermLevel($termID, $arrParentIDs);
 | |
| 
 | |
| 				$term["level"] = $level;
 | |
| 
 | |
| 				$arrTerms[$key] = $term;
 | |
| 			}
 | |
| 
 | |
| 			return($arrTerms);
 | |
| 		}
 | |
| 
 | |
| 
 | |
| 		/**
 | |
| 		 * get term level
 | |
| 		 */
 | |
| 		private static function getTermLevel($termID, $arrParentIDs){
 | |
| 
 | |
| 			$level = 0;
 | |
| 
 | |
| 			do{
 | |
| 				$termID = UniteFunctionsUC::getVal($arrParentIDs, $termID);
 | |
| 
 | |
| 				$isFound = !empty($termID);
 | |
| 
 | |
| 				if($isFound == true)
 | |
| 					$level++;
 | |
| 
 | |
| 			}while($isFound);
 | |
| 
 | |
| 			return($level);
 | |
| 		}
 | |
| 
 | |
| 
 | |
| 		/**
 | |
| 		 * get term hierarchy level
 | |
| 		 */
 | |
| 		public static function getTermsIDsWithParentIDs($taxonomy){
 | |
| 
 | |
| 			//get from cache
 | |
| 
 | |
| 			$arrParentsCache = UniteFunctionsUC::getVal(self::$arrTermParentsCache, $taxonomy);
 | |
| 
 | |
| 			if(!empty($arrParentsCache))
 | |
| 				return($arrParentsCache);
 | |
| 
 | |
| 			$arrHierarchy = _get_term_hierarchy($taxonomy);
 | |
| 
 | |
| 			if(empty($arrHierarchy))
 | |
| 				return(array());
 | |
| 
 | |
| 			$arrTermIDs = array();
 | |
| 
 | |
| 			foreach($arrHierarchy as $parentID => $arrIDs){
 | |
| 
 | |
| 				foreach($arrIDs as $termID)
 | |
| 					$arrTermIDs[$termID] = $parentID;
 | |
| 			}
 | |
| 
 | |
| 
 | |
| 			//add cache
 | |
| 			self::$arrTermParentsCache[$taxonomy] = $arrTermIDs;
 | |
| 
 | |
| 			return($arrTermIDs);
 | |
| 		}
 | |
| 
 | |
| 
 | |
| 
 | |
| 		public static function a_________CATEGORIES_AND_TAGS___________(){}
 | |
| 
 | |
| 
 | |
| 
 | |
| 		/**
 | |
| 		 * check if category not exists and add it, return catID anyway
 | |
| 		 */
 | |
| 		public static function addCategory($catName){
 | |
| 
 | |
| 			$catID = self::getCatIDByTitle($catName);
 | |
| 			if(!empty($catID))
 | |
| 				return($catID);
 | |
| 
 | |
| 			$arrCat = array(
 | |
| 			  'cat_name' => $catName
 | |
| 			);
 | |
| 
 | |
| 			$catID = wp_insert_category($arrCat);
 | |
| 			if($catID == false)
 | |
| 				UniteFunctionsUC::throwError("category: $catName don't created");
 | |
| 
 | |
| 			return($catID);
 | |
| 		}
 | |
| 
 | |
| 
 | |
| 		/**
 | |
| 		 *
 | |
| 		 * get the category data
 | |
| 		 */
 | |
| 		public static function getCategoryData($catID){
 | |
| 			$catData = get_category($catID);
 | |
| 			if(empty($catData))
 | |
| 				return($catData);
 | |
| 
 | |
| 			$catData = (array)$catData;
 | |
| 			return($catData);
 | |
| 		}
 | |
| 
 | |
| 
 | |
| 		/**
 | |
| 		 *
 | |
| 		 * get post categories by postID and taxonomies
 | |
| 		 * the postID can be post object or array too
 | |
| 		 */
 | |
| 		public static function getPostCategoriesIDs($post){
 | |
| 
 | |
| 			if(empty($post))
 | |
| 				return(array());
 | |
| 
 | |
| 			$postType = $post->post_type;
 | |
| 
 | |
| 			$taxonomy = "category";
 | |
| 
 | |
| 			switch($postType){
 | |
| 				case "post":
 | |
| 				case "page":
 | |
| 					$taxonomy = "category";
 | |
| 				break;
 | |
| 				case "product":
 | |
| 					$taxonomy = "product_category";
 | |
| 				break;
 | |
| 			}
 | |
| 
 | |
| 			$arrCatIDs = wp_get_post_terms( $post->ID, $taxonomy, array( 'fields' => 'ids' ));
 | |
| 
 | |
| 			return($arrCatIDs);
 | |
| 		}
 | |
| 
 | |
| 		/**
 | |
| 		 *
 | |
| 		 * get post categories by postID and taxonomies
 | |
| 		 * the postID can be post object or array too
 | |
| 		 */
 | |
| 		public static function getPostTagsIDs($post){
 | |
| 
 | |
| 			if(empty($post))
 | |
| 				return(array());
 | |
| 
 | |
| 			$postType = $post->post_type;
 | |
| 
 | |
| 			$taxonomy = "category";
 | |
| 
 | |
| 			switch($postType){
 | |
| 				case "post":
 | |
| 				case "page":
 | |
| 					$taxonomy = "post_tag";
 | |
| 				break;
 | |
| 				case "product":
 | |
| 					$taxonomy = "product_tag";
 | |
| 				break;
 | |
| 			}
 | |
| 
 | |
| 			$arrTagsIDs = wp_get_post_terms( $post->ID, $taxonomy, array( 'fields' => 'ids' ));
 | |
| 
 | |
| 			return($arrTagsIDs);
 | |
| 		}
 | |
| 
 | |
| 
 | |
| 		/**
 | |
| 		 *
 | |
| 		 * get post categories list assoc - id / title
 | |
| 		 */
 | |
| 		public static function getCategoriesAssoc($taxonomy = "category", $addNotSelected = false, $forPostType = null){
 | |
| 
 | |
| 			if($taxonomy === null)
 | |
| 				$taxonomy = "category";
 | |
| 
 | |
| 			$arrCats = array();
 | |
| 
 | |
| 			if($addNotSelected == true)
 | |
| 				$arrCats["all"] = esc_html__("[All Categories]", "unlimited-elements-for-elementor");
 | |
| 
 | |
| 			if(strpos($taxonomy,",") !== false){
 | |
| 				$arrTax = explode(",", $taxonomy);
 | |
| 				foreach($arrTax as $tax){
 | |
| 					$cats = self::getCategoriesAssoc($tax);
 | |
| 					$arrCats = array_merge($arrCats,$cats);
 | |
| 				}
 | |
| 
 | |
| 				return($arrCats);
 | |
| 			}
 | |
| 
 | |
| 			$args = array("taxonomy"=>$taxonomy);
 | |
| 			$args["hide_empty"] = false;
 | |
| 			$args["number"] = 5000;
 | |
| 
 | |
| 			$cats = get_categories($args);
 | |
| 
 | |
| 			foreach($cats as $cat){
 | |
| 
 | |
| 				$numItems = $cat->count;
 | |
| 				$itemsName = "items";
 | |
| 				if($numItems == 1)
 | |
| 					$itemsName = "item";
 | |
| 
 | |
| 				$title = $cat->name . " ($numItems $itemsName)";
 | |
| 
 | |
| 				$id = $cat->cat_ID;
 | |
| 				$arrCats[$id] = $title;
 | |
| 			}
 | |
| 			return($arrCats);
 | |
| 		}
 | |
| 
 | |
| 		/**
 | |
| 		 *
 | |
| 		 * get categories by id's
 | |
| 		 */
 | |
| 		public static function getCategoriesByIDs($arrIDs,$strTax = null){
 | |
| 
 | |
| 			if(empty($arrIDs))
 | |
| 				return(array());
 | |
| 
 | |
| 			if(is_string($arrIDs))
 | |
| 				$strIDs = $arrIDs;
 | |
| 			else
 | |
| 				$strIDs = implode(",", $arrIDs);
 | |
| 
 | |
| 			$args = array();
 | |
| 			$args["include"] = $strIDs;
 | |
| 
 | |
| 			if(!empty($strTax)){
 | |
| 				if(is_string($strTax))
 | |
| 					$strTax = explode(",",$strTax);
 | |
| 
 | |
| 				$args["taxonomy"] = $strTax;
 | |
| 			}
 | |
| 
 | |
| 			$arrCats = get_categories( $args );
 | |
| 
 | |
| 			if(!empty($arrCats))
 | |
| 				$arrCats = UniteFunctionsUC::convertStdClassToArray($arrCats);
 | |
| 
 | |
| 			return($arrCats);
 | |
| 		}
 | |
| 
 | |
| 
 | |
| 		/**
 | |
| 		 *
 | |
| 		 * get categories short
 | |
| 		 */
 | |
| 		public static function getCategoriesByIDsShort($arrIDs,$strTax = null){
 | |
| 			$arrCats = self::getCategoriesByIDs($arrIDs,$strTax);
 | |
| 			$arrNew = array();
 | |
| 			foreach($arrCats as $cat){
 | |
| 				$catID = $cat["term_id"];
 | |
| 				$catName = $cat["name"];
 | |
| 				$arrNew[$catID] =  $catName;
 | |
| 			}
 | |
| 
 | |
| 			return($arrNew);
 | |
| 		}
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 		/**
 | |
| 		 *
 | |
| 		 * get post tags html list
 | |
| 		 */
 | |
| 		public static function getTagsHtmlList($postID,$before="",$sap=",",$after=""){
 | |
| 
 | |
| 			$tagList = get_the_tag_list($before,",",$after,$postID);
 | |
| 
 | |
| 			return($tagList);
 | |
| 		}
 | |
| 
 | |
| 
 | |
| 		/**
 | |
| 		 * get category by slug name
 | |
| 		 */
 | |
| 		public static function getCatIDBySlug($slug, $type = "slug"){
 | |
| 
 | |
| 			$arrCats = get_categories(array("hide_empty"=>false));
 | |
| 
 | |
| 			foreach($arrCats as $cat){
 | |
| 				$cat = (array)$cat;
 | |
| 
 | |
| 				switch($type){
 | |
| 					case "slug":
 | |
| 						$catSlug = $cat["slug"];
 | |
| 					break;
 | |
| 					case "title":
 | |
| 						$catSlug = $cat["name"];
 | |
| 					break;
 | |
| 					default:
 | |
| 						UniteFunctionsUC::throwError("Wrong cat name");
 | |
| 					break;
 | |
| 				}
 | |
| 
 | |
| 				$catID = $cat["term_id"];
 | |
| 
 | |
| 				if($catSlug == $slug)
 | |
| 					return($catID);
 | |
| 			}
 | |
| 
 | |
| 			return(null);
 | |
| 		}
 | |
| 
 | |
| 		/**
 | |
| 		 * get category by title (name)
 | |
| 		 */
 | |
| 		public static function getCatIDByTitle($title){
 | |
| 
 | |
| 			$catID = self::getCatIDBySlug($title,"title");
 | |
| 
 | |
| 			return($catID);
 | |
| 		}
 | |
| 
 | |
| 		public static function a________GENERAL_GETTERS________(){}
 | |
| 
 | |
| 
 | |
| 		/**
 | |
| 		 *
 | |
| 		 * get sort by with the names
 | |
| 		 */
 | |
| 		public static function getArrSortBy($isForWoo = false, $forFilter = false){
 | |
| 
 | |
| 			$arr = array();
 | |
| 			$arr["default"] = __("Default", "unlimited-elements-for-elementor");
 | |
| 
 | |
| 			if($forFilter == true){
 | |
| 				$arr["meta"] = __("Meta Field", "unlimited-elements-for-elementor");
 | |
| 			}
 | |
| 
 | |
| 			$postid = self::SORTBY_ID;
 | |
| 			if($forFilter == true)
 | |
| 				$postid = "id";
 | |
| 
 | |
| 			$arr[$postid] = __("Post ID", "unlimited-elements-for-elementor");
 | |
| 
 | |
| 			$arr[self::SORTBY_DATE] = __("Date", "unlimited-elements-for-elementor");
 | |
| 			$arr[self::SORTBY_TITLE] = __("Title", "unlimited-elements-for-elementor");
 | |
| 
 | |
| 			if($isForWoo == true){
 | |
| 				$arr[self::SORTBY_PRICE] = __("Price (WooCommerce)", "unlimited-elements-for-elementor");
 | |
| 				$arr[self::SORTBY_SALE_PRICE] = __("Sale Price (WooCommerce)", "unlimited-elements-for-elementor");
 | |
| 				$arr[self::SORTBY_SALES] = __("Number of Sales (WooCommerce)", "unlimited-elements-for-elementor");
 | |
| 				$arr[self::SORTBY_RATING] = __("Rating (WooCommerce)", "unlimited-elements-for-elementor");
 | |
| 			}
 | |
| 
 | |
| 			$arr[self::SORTBY_SLUG] = __("Slug", "unlimited-elements-for-elementor");
 | |
| 			$arr[self::SORTBY_AUTHOR] = __("Author", "unlimited-elements-for-elementor");
 | |
| 			$arr[self::SORTBY_LAST_MODIFIED] = __("Last Modified", "unlimited-elements-for-elementor");
 | |
| 			$arr[self::SORTBY_COMMENT_COUNT] = __("Number Of Comments", "unlimited-elements-for-elementor");
 | |
| 			$arr[self::SORTBY_RAND] = __("Random", "unlimited-elements-for-elementor");
 | |
| 			$arr[self::SORTBY_NONE] = __("Unsorted", "unlimited-elements-for-elementor");
 | |
| 			$arr[self::SORTBY_MENU_ORDER] = __("Menu Order", "unlimited-elements-for-elementor");
 | |
| 			$arr[self::SORTBY_PARENT] = __("Parent Post", "unlimited-elements-for-elementor");
 | |
| 
 | |
| 			if($forFilter !== true){
 | |
| 
 | |
| 				$arr["post__in"] = __("Preserve Posts In Order", "unlimited-elements-for-elementor");
 | |
| 
 | |
| 				$arr[self::SORTBY_META_VALUE] = __("Meta Field Value", "unlimited-elements-for-elementor");
 | |
| 				$arr[self::SORTBY_META_VALUE_NUM] = __("Meta Field Value (numeric)", "unlimited-elements-for-elementor");
 | |
| 			}
 | |
| 
 | |
| 			return($arr);
 | |
| 		}
 | |
| 
 | |
| 
 | |
| 		/**
 | |
| 		 *
 | |
| 		 * get array of sort direction
 | |
| 		 */
 | |
| 		public static function getArrSortDirection(){
 | |
| 
 | |
| 			$arr = array();
 | |
| 			$arr["default"] = __("Default", "unlimited-elements-for-elementor");
 | |
| 			$arr[self::ORDER_DIRECTION_DESC] = __("Descending", "unlimited-elements-for-elementor");
 | |
| 			$arr[self::ORDER_DIRECTION_ASC] = __("Ascending", "unlimited-elements-for-elementor");
 | |
| 
 | |
| 			return($arr);
 | |
| 		}
 | |
| 
 | |
| 		/**
 | |
| 		 * get sort by term
 | |
| 		 */
 | |
| 		public static function getArrTermSortBy(){
 | |
| 
 | |
| 			$arr = array();
 | |
| 			$arr["default"] = __("Default", "unlimited-elements-for-elementor");
 | |
| 			$arr["name"] = __("Name", "unlimited-elements-for-elementor");
 | |
| 			$arr["slug"] = __("Slug", "unlimited-elements-for-elementor");
 | |
| 			$arr["term_group"] = __("Term Group", "unlimited-elements-for-elementor");
 | |
| 			$arr["term_id"] = __("Term ID", "unlimited-elements-for-elementor");
 | |
| 			$arr["description"] = __("Description", "unlimited-elements-for-elementor");
 | |
| 			$arr["parent"] = __("Parent", "unlimited-elements-for-elementor");
 | |
| 			$arr["parent_children"] = __("Parent and Children", "unlimited-elements-for-elementor");
 | |
| 			$arr["count"] = __("Count - (number of posts associated)", "unlimited-elements-for-elementor");
 | |
| 
 | |
| 			return($arr);
 | |
| 		}
 | |
| 
 | |
| 		private function a_______CUSTOM_FIELDS________(){}
 | |
| 
 | |
| 
 | |
| 		/**
 | |
| 		 * get keys of acf fields
 | |
| 		 */
 | |
| 		public static function getAcfFieldsKeys($postID, $objName = "post", $addPrefix = true){
 | |
| 
 | |
| 			$objAcf = self::getObjAcfIntegrate();
 | |
| 
 | |
| 			$arrKeys = $objAcf->getAcfFieldsKeys($postID, $objName, $addPrefix);
 | |
| 
 | |
| 			return($arrKeys);
 | |
| 		}
 | |
| 
 | |
| 
 | |
| 		/**
 | |
| 		 * get term custom field
 | |
| 		 */
 | |
| 		public static function getTermCustomFields($termID, $addPrefixes = true){
 | |
| 
 | |
| 			$cacheKey = $termID;
 | |
| 			if($addPrefixes == true)
 | |
| 				$cacheKey = $termID."_prefixes";
 | |
| 
 | |
| 			if(isset(self::$cacheTermCustomFields[$cacheKey]))
 | |
| 				return(self::$cacheTermCustomFields[$cacheKey]);
 | |
| 
 | |
| 			$arrMeta = self::getTermMeta($termID, $addPrefixes);
 | |
| 
 | |
| 			if(empty($arrMeta))
 | |
| 				return(array());
 | |
| 
 | |
| 			$isAcfActive = UniteCreatorAcfIntegrate::isAcfActive();
 | |
| 
 | |
| 			if($isAcfActive == false)
 | |
| 				return($arrMeta);
 | |
| 
 | |
| 			//merge with acf
 | |
| 
 | |
| 			$objAcf = self::getObjAcfIntegrate();
 | |
| 			$arrCustomFields = $objAcf->getAcfFields($termID, "term",$addPrefixes);
 | |
| 
 | |
| 			if(!empty($arrCustomFields))
 | |
| 				$arrMeta = array_merge($arrMeta, $arrCustomFields);
 | |
| 
 | |
| 			self::$cacheTermCustomFields[$cacheKey] = $arrMeta;
 | |
| 
 | |
| 			return($arrMeta);
 | |
| 		}
 | |
| 
 | |
| 		/**
 | |
| 		 * get post custom field
 | |
| 		 */
 | |
| 		public static function getTermCustomField($termID, $name){
 | |
| 
 | |
| 			if(empty($name))
 | |
| 				return("");
 | |
| 
 | |
| 			$isAcfActive = UniteCreatorAcfIntegrate::isAcfActive();
 | |
| 
 | |
| 			$value = "";
 | |
| 
 | |
| 			if($isAcfActive == true){
 | |
| 
 | |
| 				$objAcf = self::getObjAcfIntegrate();
 | |
| 				$value = $objAcf->getAcfFieldValue($name, $termID,"term");
 | |
| 
 | |
| 				if(empty($value))
 | |
| 					$value = get_term_meta($termID, $name, true);
 | |
| 			}else
 | |
| 				$value = get_term_meta($termID, $name, true);
 | |
| 
 | |
| 			if(is_array($value))
 | |
| 				$value = json_encode($value);
 | |
| 
 | |
| 			$value = trim($value);
 | |
| 
 | |
| 			return($value);
 | |
| 		}
 | |
| 
 | |
| 
 | |
| 		/**
 | |
| 		 * get post custom field
 | |
| 		 */
 | |
| 		public static function getPostCustomField($postID, $name){
 | |
| 
 | |
| 			if(empty($name))
 | |
| 				return("");
 | |
| 
 | |
| 			$isAcfActive = UniteCreatorAcfIntegrate::isAcfActive();
 | |
| 
 | |
| 			$value = "";
 | |
| 
 | |
| 			if($isAcfActive == true){
 | |
| 
 | |
| 				$objAcf = self::getObjAcfIntegrate();
 | |
| 				$value = $objAcf->getAcfFieldValue($name, $postID);
 | |
| 
 | |
| 				if(empty($value))
 | |
| 					$value = get_post_meta($postID, $name, true);
 | |
| 			}else
 | |
| 				$value = get_post_meta($postID, $name, true);
 | |
| 
 | |
| 			if(is_array($value))
 | |
| 				$value = json_encode($value);
 | |
| 
 | |
| 			$value = trim($value);
 | |
| 
 | |
| 			return($value);
 | |
| 		}
 | |
| 
 | |
| 
 | |
| 		/**
 | |
| 		 * get post custom fields
 | |
| 		 * including acf
 | |
| 		 */
 | |
| 		public static function getPostCustomFields($postID, $addPrefixes = true, $imageSize = null){
 | |
| 
 | |
| 			$prefix = null;
 | |
| 			if($addPrefixes == true)
 | |
| 				$prefix = "cf_";
 | |
| 
 | |
| 			$isAcfActive = UniteCreatorAcfIntegrate::isAcfActive();
 | |
| 
 | |
| 			//get acf
 | |
| 			if($isAcfActive){
 | |
| 
 | |
| 				$objAcf = self::getObjAcfIntegrate();
 | |
| 				$arrCustomFields = $objAcf->getAcfFields($postID, "post", $addPrefixes, $imageSize);
 | |
| 
 | |
| 				//if emtpy - get from regular meta
 | |
| 				if(empty($arrCustomFields))
 | |
| 					$arrCustomFields = self::getPostMeta($postID, false, $prefix);
 | |
| 
 | |
| 
 | |
| 			}else{		//without acf - get regular custom fields
 | |
| 
 | |
| 				$arrCustomFields = null;
 | |
| 
 | |
| 				$isPodsExists = UniteCreatorPodsIntegrate::isPodsExists();
 | |
| 				if($isPodsExists){
 | |
| 					$objPods = UniteCreatorPodsIntegrate::getObjPodsIntegrate();
 | |
| 					$arrCustomFields = $objPods->getPodsFields($postID, $addPrefixes);
 | |
| 				}
 | |
| 
 | |
| 				//handle toolset
 | |
| 				$isToolsetActive = UniteCreatorToolsetIntegrate::isToolsetExists();
 | |
| 
 | |
| 				if($isToolsetActive == true && empty($arrCustomFields)){
 | |
| 					$objToolset = new UniteCreatorToolsetIntegrate();
 | |
| 
 | |
| 					$arrCustomFields = $objToolset->getPostFieldsWidthData($postID);
 | |
| 				}
 | |
| 
 | |
| 				if(empty($arrCustomFields))
 | |
| 					$arrCustomFields = self::getPostMeta($postID, false, $prefix);
 | |
| 
 | |
| 			}
 | |
| 
 | |
| 			if(empty($arrCustomFields)){
 | |
| 				$arrCustomFields = array();
 | |
| 				return($arrCustomFields);
 | |
| 			}
 | |
| 
 | |
| 
 | |
| 			return($arrCustomFields);
 | |
| 		}
 | |
| 
 | |
| 
 | |
| 		/**
 | |
| 		 * get post meta data
 | |
| 		 */
 | |
| 		public static function getPostMeta($postID, $getSystemVars = true, $prefix = null){
 | |
| 
 | |
| 			$arrMeta = get_post_meta($postID);
 | |
| 			$arrMetaOutput = array();
 | |
| 
 | |
| 			foreach($arrMeta as $key=>$item){
 | |
| 
 | |
| 				//filter by key
 | |
| 				if($getSystemVars == false){
 | |
| 					$firstSign = $key[0];
 | |
| 
 | |
| 					if($firstSign == "_")
 | |
| 						continue;
 | |
| 				}
 | |
| 
 | |
| 				if(!empty($prefix))
 | |
| 					$key = $prefix.$key;
 | |
| 
 | |
| 				if(is_array($item) && count($item) == 1)
 | |
| 					$item = $item[0];
 | |
| 
 | |
| 				$arrMetaOutput[$key] = $item;
 | |
| 			}
 | |
| 
 | |
| 
 | |
| 			return($arrMetaOutput);
 | |
| 		}
 | |
| 
 | |
| 
 | |
| 		/**
 | |
| 		 * get terms meta
 | |
| 		 */
 | |
| 		public static function getTermMeta($termID, $addPrefixes = false){
 | |
| 
 | |
| 			$arrMeta = get_term_meta($termID);
 | |
| 
 | |
| 			if(empty($arrMeta))
 | |
| 				return(array());
 | |
| 
 | |
| 			$arrMetaOutput = array();
 | |
| 
 | |
| 			foreach($arrMeta as $key=>$item){
 | |
| 
 | |
| 				if(is_array($item) && count($item) == 1)
 | |
| 					$item = $item[0];
 | |
| 
 | |
| 				if($addPrefixes == true)
 | |
| 					$key = "cf_".$key;
 | |
| 
 | |
| 				$arrMetaOutput[$key] = $item;
 | |
| 			}
 | |
| 
 | |
| 			return($arrMetaOutput);
 | |
| 		}
 | |
| 		
 | |
| 		/**
 | |
| 		 * get term meta image id. guess what the image is by the type
 | |
| 		 */
 | |
| 		public static function getTermMetaImageID($termID){
 | |
| 		
 | |
| 			$isAcfActive = UniteCreatorAcfIntegrate::isAcfActive();
 | |
| 
 | |
| 			//get iamge from acf if exists
 | |
| 			
 | |
| 			if($isAcfActive){
 | |
| 
 | |
| 				$objAcf = self::getObjAcfIntegrate();
 | |
| 				$arrImageIDs = $objAcf->getAcfFieldsImageIDs($termID, "term");
 | |
| 				
 | |
| 				//get array of meta image id's
 | |
| 				
 | |
| 				if(isset($arrImageIDs["thumbnail_id"]))
 | |
| 					return($arrImageIDs["thumbnail_id"]);
 | |
| 				
 | |
| 				$imageID = UniteFunctionsUC::getArrFirstValue($arrImageIDs);
 | |
| 								
 | |
| 				if(!empty($imageID) && is_numeric($imageID))
 | |
| 					return($imageID);
 | |
| 			}
 | |
| 			
 | |
| 			$arrMeta = self::getTermMeta($termID);
 | |
| 
 | |
| 			if(empty($arrMeta))
 | |
| 				return(null);
 | |
| 			
 | |
| 			
 | |
| 			//guess by name
 | |
| 				
 | |
| 			$arrNames = array("thumbnail_id","image","img","thumbnail","thumb");
 | |
| 			
 | |
| 			foreach($arrNames as $name){
 | |
| 				
 | |
| 				if(!isset($arrMeta[$name]))
 | |
| 					continue;
 | |
| 					
 | |
| 				$imageID = $arrMeta[$name];
 | |
| 				
 | |
| 				if(is_numeric($imageID) == false){
 | |
| 					
 | |
| 					$arrItem = UniteFunctionsUC::maybeUnserialize($imageID);
 | |
| 					
 | |
| 					if(is_array($arrItem))
 | |
| 						$imageID = UniteFunctionsUC::getVal($arrItem, "id");
 | |
| 				}
 | |
| 				
 | |
| 				
 | |
| 				if(!empty($imageID) && is_numeric($imageID))
 | |
| 					return($imageID);
 | |
| 			}
 | |
| 			
 | |
| 			
 | |
| 			//if not quesing - not continue, they should enter the exact meta key
 | |
| 			
 | |
| 			return(null);
 | |
| 		}
 | |
| 		
 | |
| 		/**
 | |
| 		 * get term image id, or null
 | |
| 		 * metaKey - some key | debug | woo_cat
 | |
| 		 */
 | |
| 		public static function getTermImageID($termID, $metaKey){
 | |
| 			
 | |
| 			if(empty($termID) || $termID === "current")
 | |
| 				$termID = self::getCurrentTermID();
 | |
| 
 | |
| 			if(empty($termID))
 | |
| 				return(null);
 | |
| 
 | |
| 			if($metaKey == "debug"){
 | |
| 				$arrMeta = get_term_meta($termID);
 | |
| 				
 | |
| 				dmp("term: $termID meta: ");
 | |
| 	
 | |
| 				dmp($arrMeta);
 | |
| 			}
 | |
| 			
 | |
| 			// guess the woo category meta key
 | |
| 			
 | |
| 			if($metaKey == "woo_cat"){
 | |
| 				
 | |
| 				$thumbID = self::getTermMetaImageID($termID);
 | |
| 				
 | |
| 				return($thumbID);
 | |
| 			}
 | |
| 
 | |
| 			if(empty($metaKey))
 | |
| 				return (null);
 | |
| 			
 | |
| 			$attachmentID = get_term_meta($termID, $metaKey, true);
 | |
| 			
 | |
| 			
 | |
| 			if(!empty($attachmentID) && is_numeric($attachmentID) == false){
 | |
| 				
 | |
| 				$arrItem = UniteFunctionsUC::maybeUnserialize($attachmentID);
 | |
| 				
 | |
| 				if(is_array($arrItem))
 | |
| 					$attachmentID = UniteFunctionsUC::getVal($arrItem, "id");
 | |
| 			}
 | |
| 			
 | |
| 			
 | |
| 			return($attachmentID);
 | |
| 		}
 | |
| 		
 | |
| 		
 | |
| 		/**
 | |
| 		 * get term meta
 | |
| 		 */
 | |
| 		public static function getTermImage($termID, $metaKey){
 | |
| 			
 | |
| 			$attachmentID = self::getTermImageID($termID, $metaKey);
 | |
| 			
 | |
| 			if(empty($attachmentID))
 | |
| 				return (null);
 | |
| 			
 | |
| 			$arrImage = self::getAttachmentData($attachmentID);
 | |
| 		
 | |
| 		return ($arrImage);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * get term meta
 | |
| 	 */
 | |
| 	public static function getPostImage($postID, $metaKey){
 | |
| 
 | |
| 		if(empty($postID) || $postID === "current")
 | |
| 			$postID = get_post();
 | |
| 
 | |
| 		if(empty($postID))
 | |
| 			return (null);
 | |
| 
 | |
| 		if($metaKey == "debug"){
 | |
| 			$arrMeta = get_post_meta($postID);
 | |
| 
 | |
| 			dmp("post: $postID meta: ");
 | |
| 
 | |
| 			dmp($arrMeta);
 | |
| 		}
 | |
| 
 | |
| 		if(empty($metaKey))
 | |
| 			return (null);
 | |
| 
 | |
| 		$attachmentID = get_post_meta($postID, $metaKey, true);
 | |
| 
 | |
| 		if(empty($attachmentID))
 | |
| 			return (null);
 | |
| 
 | |
| 		$arrImage = self::getAttachmentData($attachmentID);
 | |
| 
 | |
| 		return ($arrImage);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * get pods meta keys
 | |
| 	 */
 | |
| 	public static function getPostMetaKeys_PODS($postID){
 | |
| 
 | |
| 		$isPodsExists = UniteCreatorPodsIntegrate::isPodsExists();
 | |
| 
 | |
| 		if($isPodsExists == false)
 | |
| 			return (array());
 | |
| 
 | |
| 		$objPods = UniteCreatorPodsIntegrate::getObjPodsIntegrate();
 | |
| 		$arrCustomFields = $objPods->getPodsFields($postID);
 | |
| 
 | |
| 		if(empty($arrCustomFields))
 | |
| 			return (array());
 | |
| 
 | |
| 		$arrMetaKeys = array_keys($arrCustomFields);
 | |
| 
 | |
| 		return ($arrMetaKeys);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * get post meta keys
 | |
| 	 */
 | |
| 	public static function getPostMetaKeys_TOOLSET($postID){
 | |
| 
 | |
| 		$isToolsetExists = UniteCreatorToolsetIntegrate::isToolsetExists();
 | |
| 		if($isToolsetExists == false)
 | |
| 			return (array());
 | |
| 
 | |
| 		$objToolset = new UniteCreatorToolsetIntegrate();
 | |
| 		$arrFieldsKeys = $objToolset->getPostFieldsKeys($postID);
 | |
| 		if(empty($arrFieldsKeys))
 | |
| 			return ($arrFieldsKeys);
 | |
| 
 | |
| 		return ($arrFieldsKeys);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * get post meta data
 | |
| 	 */
 | |
| 	public static function getPostMetaKeys($postID, $prefix = null, $includeUnderscore = false){
 | |
| 
 | |
| 		$postMeta = get_post_meta($postID);
 | |
| 
 | |
| 		if(empty($postMeta))
 | |
| 			return (array());
 | |
| 
 | |
| 		$arrMetaKeys = array_keys($postMeta);
 | |
| 
 | |
| 		$arrKeysOutput = array();
 | |
| 		foreach($arrMetaKeys as $key){
 | |
| 			$firstSign = $key[0];
 | |
| 
 | |
| 			if($firstSign == "_" && $includeUnderscore == false)
 | |
| 				continue;
 | |
| 
 | |
| 			if(!empty($prefix))
 | |
| 				$key = $prefix . $key;
 | |
| 
 | |
| 			$arrKeysOutput[] = $key;
 | |
| 		}
 | |
| 
 | |
| 		return ($arrKeysOutput);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * get term custom field
 | |
| 	 */
 | |
| 	public static function getUserCustomFields($userID, $addPrefixes = true){
 | |
| 
 | |
| 		$cacheKey = $userID;
 | |
| 		if($addPrefixes == true)
 | |
| 			$cacheKey = $userID . "_prefixes";
 | |
| 
 | |
| 		if(isset(self::$cacheUserCustomFields[$cacheKey]))
 | |
| 			return (self::$cacheUserCustomFields[$cacheKey]);
 | |
| 
 | |
| 		$isAcfActive = UniteCreatorAcfIntegrate::isAcfActive();
 | |
| 
 | |
| 		if($isAcfActive == false){
 | |
| 			$arrMeta = self::getUserMeta($userID, array(), $addPrefixes);
 | |
| 
 | |
| 			return ($arrMeta);
 | |
| 		}
 | |
| 
 | |
| 		$objAcf = self::getObjAcfIntegrate();
 | |
| 		$arrCustomFields = $objAcf->getAcfFields($userID, "user", $addPrefixes);
 | |
| 
 | |
| 		self::$cacheUserCustomFields[$cacheKey] = $arrCustomFields;
 | |
| 
 | |
| 		return ($arrCustomFields);
 | |
| 	}
 | |
| 
 | |
| 	public static function a__________POST_GETTERS__________(){	}
 | |
| 
 | |
| 	/**
 | |
| 	 *
 | |
| 	 * get single post
 | |
| 	 */
 | |
| 	public static function getPost($postID, $addAttachmentImage = false, $getMeta = false){
 | |
| 
 | |
| 		$post = get_post($postID);
 | |
| 		if(empty($post))
 | |
| 			UniteFunctionsUC::throwError("Post with id: $postID not found");
 | |
| 
 | |
| 		$arrPost = $post->to_array();
 | |
| 
 | |
| 		if($addAttachmentImage == true){
 | |
| 			$arrImage = self::getPostAttachmentImage($postID);
 | |
| 			if(!empty($arrImage))
 | |
| 				$arrPost["image"] = $arrImage;
 | |
| 		}
 | |
| 
 | |
| 		if($getMeta == true)
 | |
| 			$arrPost["meta"] = self::getPostMeta($postID);
 | |
| 
 | |
| 		return ($arrPost);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * get post by name
 | |
| 	 */
 | |
| 	public static function getPostByName($name, $postType = null){
 | |
| 
 | |
| 		if(!empty($postType)){
 | |
| 			$query = array(
 | |
| 				'name' => $name,
 | |
| 				'post_type' => $postType,
 | |
| 			);
 | |
| 
 | |
| 			$arrPosts = get_posts($query);
 | |
| 			$post = $arrPosts[0];
 | |
| 
 | |
| 			return ($post);
 | |
| 		}
 | |
| 
 | |
| 		//get only by name
 | |
| 		$postID = self::getPostIDByPostName($name);
 | |
| 		if(empty($postID))
 | |
| 			return (null);
 | |
| 
 | |
| 		$post = get_post($postID);
 | |
| 
 | |
| 		return ($post);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * get post children
 | |
| 	 */
 | |
| 	public static function getPostChildren($post){
 | |
| 
 | |
| 		if(empty($post))
 | |
| 			return (array());
 | |
| 
 | |
| 		$args = array();
 | |
| 		$args["post_parent"] = $post->ID;
 | |
| 		$args["post_type"] = $post->post_type;
 | |
| 
 | |
| 		$arrPosts = get_posts($args);
 | |
| 
 | |
| 		return ($arrPosts);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * get post id by post name
 | |
| 	 */
 | |
| 	public static function getPostIDByPostName($postName){
 | |
| 
 | |
| 		$tablePosts = UniteProviderFunctionsUC::$tablePosts;
 | |
| 
 | |
| 		$db = self::getDB();
 | |
| 		$response = $db->fetch($tablePosts, array("post_name" => $postName));
 | |
| 
 | |
| 		if(empty($response))
 | |
| 			return (null);
 | |
| 
 | |
| 		$postID = $response[0]["ID"];
 | |
| 
 | |
| 		return ($postID);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * get post id by name, using DB
 | |
| 	 */
 | |
| 	public static function isPostNameExists($postName){
 | |
| 
 | |
| 		$tablePosts = UniteProviderFunctionsUC::$tablePosts;
 | |
| 
 | |
| 		$db = self::getDB();
 | |
| 		$response = $db->fetch($tablePosts, array("post_name" => $postName));
 | |
| 
 | |
| 		$isExists = !empty($response);
 | |
| 
 | |
| 		return ($isExists);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * where filter, add the search query
 | |
| 	 */
 | |
| 	public static function getPosts_whereFilter($where, $wp_query){
 | |
| 
 | |
| 		global $wpdb;
 | |
| 
 | |
| 		$arrQuery = $wp_query->query;
 | |
| 		$titleFilter = UniteFunctionsUC::getVal($arrQuery, "title_filter");
 | |
| 
 | |
| 		if(!empty($titleFilter)){
 | |
| 			if(!empty($where))
 | |
| 				$where .= " AND";
 | |
| 
 | |
| 			$where .= " wp_posts.post_title like '%$titleFilter%'";
 | |
| 		}
 | |
| 
 | |
| 		return ($where);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 *
 | |
| 	 * get posts post type
 | |
| 	 */
 | |
| 	public static function getPostsByType($postType, $sortBy = self::SORTBY_TITLE, $addParams = array(), $returnPure = false){
 | |
| 
 | |
| 		if(empty($postType))
 | |
| 			$postType = "any";
 | |
| 
 | |
| 		$query = array(
 | |
| 			'post_type' => $postType,
 | |
| 			'orderby' => $sortBy,
 | |
| 		);
 | |
| 
 | |
| 		if($sortBy == self::SORTBY_MENU_ORDER)
 | |
| 			$query["order"] = self::ORDER_DIRECTION_ASC;
 | |
| 
 | |
| 		$query["posts_per_page"] = 2000;  //no limit
 | |
| 
 | |
| 		if(!empty($addParams))
 | |
| 			$query = array_merge($query, $addParams);
 | |
| 
 | |
| 		$titleFilter = UniteFunctionsUC::getVal($query, "title_filter");
 | |
| 		if(!empty($titleFilter)){
 | |
| 			$query["suppress_filters"] = false;  //no limit
 | |
| 			add_filter('posts_where', array("UniteFunctionsWPUC", "getPosts_whereFilter"), 10, 2);
 | |
| 		}
 | |
| 
 | |
| 		$arrPosts = get_posts($query);
 | |
| 
 | |
| 		if(!empty($titleFilter))
 | |
| 			remove_filter("posts_where", array("UniteFunctionsWPUC", "getPosts_whereFilter"));
 | |
| 
 | |
| 		if($returnPure == true)
 | |
| 			return ($arrPosts);
 | |
| 
 | |
| 		foreach($arrPosts as $key => $post){
 | |
| 			if(method_exists($post, "to_array"))
 | |
| 				$arrPost = $post->to_array();
 | |
| 			else
 | |
| 				$arrPost = (array)$post;
 | |
| 
 | |
| 			$arrPosts[$key] = $arrPost;
 | |
| 		}
 | |
| 
 | |
| 		return ($arrPosts);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * get posts that has certain taxonomy
 | |
| 	 */
 | |
| 	public static function getPostsByTaxonomy($postType, $taxonomy, $term_id){
 | |
| 	
 | |
| 		$filters = array();
 | |
| 		$filters["posttype"] = $postType;
 | |
| 		$filters["category"] = $taxonomy."--{$term_id}";
 | |
| 		$filters["limit"] = 100;
 | |
| 
 | |
| 		$filters["orderby"] = "date";
 | |
| 		$filters["orderdir"] = "desc";
 | |
| 
 | |
| 		$args = UniteFunctionsWPUC::getPostsArgs($filters);
 | |
| 
 | |
| 		$posts = get_posts($args);
 | |
| 
 | |
| 		return($posts);
 | |
| 
 | |
| 
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * get tax query from a gived category
 | |
| 	 */
 | |
| 	private static function getPosts_getTaxQuery_getArrQuery($arrQuery, $category, $categoryRelation, $isIncludeChildren, $isExclude){
 | |
| 
 | |
| 		if($isIncludeChildren !== true)
 | |
| 			$isIncludeChildren = false;
 | |
| 
 | |
| 		if(is_array($category))
 | |
| 			$arrCategories = $category;
 | |
| 		else
 | |
| 			$arrCategories = explode(",", $category);
 | |
| 
 | |
| 		foreach($arrCategories as $cat){
 | |
| 			//check for empty category - mean all categories
 | |
| 			if($cat == "all" || empty($cat))
 | |
| 				continue;
 | |
| 
 | |
| 			//set taxanomy name
 | |
| 			$taxName = "category";
 | |
| 			$catID = $cat;
 | |
| 
 | |
| 			if(is_numeric($cat) == false){
 | |
| 				$arrTax = explode("--", $cat);
 | |
| 				if(count($arrTax) == 2){
 | |
| 					$taxName = $arrTax[0];
 | |
| 					$catID = $arrTax[1];
 | |
| 				}
 | |
| 			}
 | |
| 
 | |
| 			//add the search item
 | |
| 
 | |
| 			$field = "term_id";
 | |
| 			if(is_numeric($catID) == false)
 | |
| 				$field = "slug";
 | |
| 
 | |
| 			//check for special chars
 | |
| 
 | |
| 			$lastChar = substr($catID, -1);
 | |
| 			switch($lastChar){
 | |
| 				case "*":    //force include children
 | |
| 					$isIncludeChildren = true;
 | |
| 					$catID = substr($catID, 0, -1);    //remove last char
 | |
| 				break;
 | |
| 			}
 | |
| 
 | |
| 			$arrSearchItem = array();
 | |
| 			$arrSearchItem["taxonomy"] = $taxName;
 | |
| 			$arrSearchItem["field"] = $field;
 | |
| 			$arrSearchItem["terms"] = $catID;
 | |
| 			$arrSearchItem["include_children"] = $isIncludeChildren;
 | |
| 
 | |
| 			if($isExclude == true){
 | |
| 				$arrSearchItem["operator"] = "NOT IN";
 | |
| 			}
 | |
| 
 | |
| 			$arrQuery[] = $arrSearchItem;
 | |
| 		}
 | |
| 
 | |
| 		return ($arrQuery);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * group tax query by taxonomies
 | |
| 	 */
 | |
| 	public static function groupTaxQuery($arrQuery){
 | |
| 
 | |
| 		if(empty($arrQuery))
 | |
| 			return($arrQuery);
 | |
| 
 | |
| 		$arrTermsByTax = array();
 | |
| 
 | |
| 		foreach($arrQuery as $term){
 | |
| 
 | |
| 			$taxonomy = UniteFunctionsUC::getVal($term, "taxonomy");
 | |
| 
 | |
| 			$arrTerms = UniteFunctionsUC::getVal($arrTermsByTax, $taxonomy);
 | |
| 			if(empty($arrTerms))
 | |
| 				$arrTerms = array();
 | |
| 
 | |
| 			$arrTerms[] = $term;
 | |
| 
 | |
| 			$arrTermsByTax[$taxonomy] = $arrTerms;
 | |
| 
 | |
| 		}
 | |
| 
 | |
| 		if(count($arrTermsByTax) == 1)
 | |
| 			return($arrQuery);
 | |
| 
 | |
| 		//combine new query
 | |
| 
 | |
| 		$arrQueryNew = array();
 | |
| 
 | |
| 		foreach($arrTermsByTax as $taxonomy => $arrGroup){
 | |
| 
 | |
| 			$numTerms = count($arrGroup);
 | |
| 
 | |
| 			//add single term or term group
 | |
| 
 | |
| 			if($numTerms == 1)
 | |
| 				$arrQueryNew[] = $arrGroup[0];
 | |
| 			else{
 | |
| 				$arrGroup["relation"] = "OR";
 | |
| 				$arrQueryNew[] = $arrGroup;
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 
 | |
| 		return($arrQueryNew);
 | |
| 	}
 | |
| 
 | |
| 
 | |
| 	/**
 | |
| 	 * get taxanomy query
 | |
| 	 * $categoryRelation - null, OR, GROUP
 | |
| 	 */
 | |
| 	public static function getPosts_getTaxQuery($category, $categoryRelation = null, $isIncludeChildren = false, $excludeCategory = null, $isExcludeChildren = true){
 | |
| 
 | |
| 
 | |
| 		if(empty($category) && empty($excludeCategory))
 | |
| 			return (null);
 | |
| 
 | |
| 		if($category == "all" && empty($excludeCategory))
 | |
| 			return (null);
 | |
| 
 | |
| 		//get the query
 | |
| 		$arrQuery = array();
 | |
| 		$arrQueryExclude = array();
 | |
| 
 | |
| 		if(!empty($category))
 | |
| 			$arrQuery = self::getPosts_getTaxQuery_getArrQuery($arrQuery, $category, $categoryRelation, $isIncludeChildren, false);
 | |
| 
 | |
| 		$numQueryItems = count($arrQuery);
 | |
| 
 | |
| 		if(!empty($excludeCategory))
 | |
| 			$arrQueryExclude = self::getPosts_getTaxQuery_getArrQuery($arrQueryExclude, $excludeCategory, $categoryRelation, $isExcludeChildren, true);
 | |
| 
 | |
| 		//make nested - if both filled
 | |
| 		if(!empty($arrQueryExclude) && !empty($arrQuery) && $numQueryItems > 1 && $categoryRelation === "OR"){
 | |
| 			//check and add relation
 | |
| 			$arrQuery["relation"] = "OR";
 | |
| 
 | |
| 			$arrQueryCombined = array();
 | |
| 			$arrQueryCombined[] = $arrQuery;
 | |
| 			$arrQueryCombined[] = $arrQueryExclude;
 | |
| 
 | |
| 			return ($arrQueryCombined);
 | |
| 		}
 | |
| 
 | |
| 		//in case there is exclude only
 | |
| 		if(!empty($arrQueryExclude))
 | |
| 			$arrQuery = array_merge($arrQuery, $arrQueryExclude);
 | |
| 
 | |
| 		//for single query
 | |
| 		if(empty($arrQuery))
 | |
| 			return (null);
 | |
| 
 | |
| 		if(count($arrQuery) == 1)
 | |
| 			return ($arrQuery);
 | |
| 
 | |
| 		if($categoryRelation == "GROUP"){
 | |
| 			$arrQuery = self::groupTaxQuery($arrQuery);
 | |
| 			return($arrQuery);
 | |
| 		}
 | |
| 
 | |
| 		//check and add relation
 | |
| 		if($categoryRelation === "OR" && $numQueryItems > 1){
 | |
| 			$arrQuery = array($arrQuery);
 | |
| 
 | |
| 			$arrQuery[0]["relation"] = "OR";
 | |
| 		}
 | |
| 
 | |
| 		return ($arrQuery);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * update order by
 | |
| 	 */
 | |
| 	public static function updatePostArgsOrderBy($args, $orderBy){
 | |
| 
 | |
| 		$arrOrderKeys = self::getArrSortBy();
 | |
| 
 | |
| 		if(isset($arrOrderKeys[$orderBy])){
 | |
| 			$args["orderby"] = $orderBy;
 | |
| 
 | |
| 			return ($args);
 | |
| 		}
 | |
| 
 | |
| 		switch($orderBy){
 | |
| 			case "price":
 | |
| 				$args["orderby"] = "meta_value_num";
 | |
| 				$args["meta_key"] = "_price";
 | |
| 			break;
 | |
| 		}
 | |
| 
 | |
| 		return ($args);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * get posts arguments by filters
 | |
| 	 * filters: search, category, category_relation, posttype, orderby, limit
 | |
| 	 */
 | |
| 	public static function getPostsArgs($filters, $isTaxonly = false){
 | |
| 
 | |
| 		$args = array();
 | |
| 
 | |
| 		$category = UniteFunctionsUC::getVal($filters, "category");
 | |
| 		$categoryRelation = UniteFunctionsUC::getVal($filters, "category_relation");
 | |
| 		$categoryIncludeChildren = UniteFunctionsUC::getVal($filters, "category_include_children");
 | |
| 
 | |
| 		$excludeCategory = UniteFunctionsUC::getVal($filters, "exclude_category");
 | |
| 
 | |
| 		$categoryExcludeChildren = UniteFunctionsUC::getVal($filters, "category_exclude_children");
 | |
| 		$categoryExcludeChildren = UniteFunctionsUC::strToBool($categoryExcludeChildren);
 | |
| 
 | |
| 		$arrTax = self::getPosts_getTaxQuery($category, $categoryRelation, $categoryIncludeChildren, $excludeCategory, $categoryExcludeChildren);
 | |
| 
 | |
| 		if($isTaxonly === true){
 | |
| 			if(!empty($arrTax)){
 | |
| 				if(count($arrTax) > 1){
 | |
| 					$arrTax = array($arrTax);
 | |
| 				}
 | |
| 
 | |
| 				$args["tax_query"] = $arrTax;
 | |
| 			}
 | |
| 
 | |
| 			return ($args);
 | |
| 		}
 | |
| 
 | |
| 		$search = UniteFunctionsUC::getVal($filters, "search");
 | |
| 		if(!empty($search))
 | |
| 			$args["s"] = $search;
 | |
| 
 | |
| 		$postType = UniteFunctionsUC::getVal($filters, "posttype");
 | |
| 
 | |
| 		if(is_array($postType) && count($postType) == 1)
 | |
| 			$postType = $postType[0];
 | |
| 
 | |
| 		$args["post_type"] = $postType;
 | |
| 
 | |
| 		if(!empty($arrTax))
 | |
| 			$args["tax_query"] = $arrTax;
 | |
| 
 | |
| 		//process orderby
 | |
| 		$orderby = UniteFunctionsUC::getVal($filters, "orderby");
 | |
| 
 | |
| 		if(!empty($orderby))
 | |
| 			$args["orderby"] = $orderby;
 | |
| 
 | |
| 		if($orderby == self::SORTBY_META_VALUE || $orderby == self::SORTBY_META_VALUE_NUM)
 | |
| 			$args["meta_key"] = UniteFunctionsUC::getVal($filters, "meta_key");
 | |
| 
 | |
| 		$isProduct = ($postType == "product");
 | |
| 
 | |
| 		//order product by price
 | |
| 		if($isProduct && $orderby == self::SORTBY_PRICE){
 | |
| 			$args["orderby"] = "meta_value_num";
 | |
| 			$args["meta_key"] = "_price";
 | |
| 		}
 | |
| 
 | |
| 		if($isProduct && $orderby == self::SORTBY_SALE_PRICE){
 | |
| 			$args["orderby"] = "meta_value_num";
 | |
| 			$args["meta_key"] = "_sale_price";
 | |
| 		}
 | |
| 
 | |
| 		$orderDir = UniteFunctionsUC::getVal($filters, "orderdir");
 | |
| 
 | |
| 		if(!empty($orderDir))
 | |
| 			$args["order"] = $orderDir;
 | |
| 
 | |
| 		$args["posts_per_page"] = UniteFunctionsUC::getVal($filters, "limit");
 | |
| 
 | |
| 		$postStatus = UniteFunctionsUC::getVal($filters, "status");
 | |
| 		if(!empty($postStatus))
 | |
| 			$args["post_status"] = $postStatus;
 | |
| 
 | |
| 		//get exlude posts
 | |
| 		$excludeCurrentPost = UniteFunctionsUC::getVal($filters, "exclude_current_post");
 | |
| 		$excludeCurrentPost = UniteFunctionsUC::strToBool($excludeCurrentPost);
 | |
| 
 | |
| 		if($excludeCurrentPost == true){
 | |
| 			$postID = get_the_ID();
 | |
| 			if(!empty($postID)){
 | |
| 				$args["post__not_in"] = array($postID);
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		return ($args);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * get posts post type
 | |
| 	 */
 | |
| 	public static function getPosts($filters){
 | |
| 
 | |
| 		$args = self::getPostsArgs($filters);
 | |
| 
 | |
| 		$arrPosts = get_posts($args);
 | |
| 
 | |
| 		if(empty($arrPosts))
 | |
| 			$arrPosts = array();
 | |
| 
 | |
| 		return ($arrPosts);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * order posts by id's
 | |
| 	 */
 | |
| 	public static function orderPostsByIDs($arrPosts, $arrPostIDs){
 | |
| 
 | |
| 		if(empty($arrPostIDs))
 | |
| 			return ($arrPosts);
 | |
| 
 | |
| 		$arrPostsAssoc = array();
 | |
| 		foreach($arrPosts as $post){
 | |
| 			$arrPostsAssoc[$post->ID] = $post;
 | |
| 		}
 | |
| 
 | |
| 		$arrOutput = array();
 | |
| 		foreach($arrPostIDs as $postID){
 | |
| 			$post = UniteFunctionsUC::getVal($arrPostsAssoc, $postID);
 | |
| 			if(empty($post))
 | |
| 				continue;
 | |
| 
 | |
| 			$arrOutput[] = $post;
 | |
| 		}
 | |
| 
 | |
| 		return ($arrOutput);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * get page template
 | |
| 	 */
 | |
| 	public static function getPostPageTemplate($post){
 | |
| 
 | |
| 		if(empty($post))
 | |
| 			return ("");
 | |
| 
 | |
| 		$arrPost = $post->to_array();
 | |
| 		$pageTemplate = UniteFunctionsUC::getVal($arrPost, "page_template");
 | |
| 
 | |
| 		return ($pageTemplate);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * get edit post url
 | |
| 	 */
 | |
| 	public static function getUrlEditPost($postID, $encodeForJS = false){
 | |
| 
 | |
| 		$context = "display";
 | |
| 		if($encodeForJS == false)
 | |
| 			$context = "normal";
 | |
| 
 | |
| 		$urlEditPost = get_edit_post_link($postID, $context);
 | |
| 
 | |
| 		return ($urlEditPost);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * check if current user can edit post
 | |
| 	 */
 | |
| 	public static function isUserCanEditPost($postID){
 | |
| 
 | |
| 		$post = get_post($postID);
 | |
| 
 | |
| 		if(empty($post))
 | |
| 			return (false);
 | |
| 
 | |
| 		$postStatus = $post->post_status;
 | |
| 		if($postStatus == "trash")
 | |
| 			return (false);
 | |
| 
 | |
| 		$postType = $post->post_type;
 | |
| 
 | |
| 		$objPostType = get_post_type_object($postType);
 | |
| 		if(empty($objPostType))
 | |
| 			return (false);
 | |
| 
 | |
| 		if(isset($objPostType->cap->edit_post) == false){
 | |
| 			return false;
 | |
| 		}
 | |
| 
 | |
| 		$editCap = $objPostType->cap->edit_post;
 | |
| 
 | |
| 		$isCanEdit = current_user_can($editCap, $postID);
 | |
| 		if($isCanEdit == false)
 | |
| 			return (false);
 | |
| 
 | |
| 		$postsPageID = get_option('page_for_posts');
 | |
| 		if($postsPageID === $postID)
 | |
| 			return (false);
 | |
| 
 | |
| 		return (true);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * get post titles by ids
 | |
| 	 */
 | |
| 	public static function getPostTitlesByIDs($arrIDs){
 | |
| 
 | |
| 		$db = self::getDB();
 | |
| 
 | |
| 		$tablePosts = UniteProviderFunctionsUC::$tablePosts;
 | |
| 
 | |
| 		$strIDs = implode(",", $arrIDs);
 | |
| 
 | |
| 		if(empty($strIDs))
 | |
| 			return (array());
 | |
| 
 | |
| 		$strIDs = $db->escape($strIDs);
 | |
| 
 | |
| 		$sql = "select ID as id,post_title as title, post_type as type from $tablePosts where ID in($strIDs)";
 | |
| 
 | |
| 		$response = $db->fetchSql($sql);
 | |
| 
 | |
| 		if(empty($response))
 | |
| 			return (array());
 | |
| 
 | |
| 		//--- keep original order
 | |
| 
 | |
| 		$response = UniteFunctionsUC::arrayToAssoc($response, "id");
 | |
| 
 | |
| 		$output = array();
 | |
| 		foreach($arrIDs as $id){
 | |
| 			$item = UniteFunctionsUC::getVal($response, $id);
 | |
| 			if(empty($item))
 | |
| 				continue;
 | |
| 
 | |
| 			$output[] = $item;
 | |
| 		}
 | |
| 
 | |
| 		return ($output);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * get post content
 | |
| 	 */
 | |
| 	public static function getPostContent($post){
 | |
| 
 | |
| 		if(empty($post))
 | |
| 			return ("");
 | |
| 
 | |
| 		//UniteFunctionsUC::showTrace();
 | |
| 		//dmp($post);
 | |
| 
 | |
| 		$postID = $post->ID;
 | |
| 
 | |
| 		//protection against infinate loops
 | |
| 
 | |
| 		if(isset(self::$cachePostContent[$postID]))
 | |
| 			return (self::$cachePostContent[$postID]);
 | |
| 
 | |
| 		self::$cachePostContent[$postID] = $post->post_content;
 | |
| 
 | |
| 		$isEditMode = GlobalsProviderUC::$isInsideEditor;
 | |
| 
 | |
| 		if($isEditMode == false)
 | |
| 			$content = get_the_content(null, false, $post);
 | |
| 		else
 | |
| 			$content = $post->post_content;
 | |
| 
 | |
| 		if(GlobalsProviderUC::$disablePostContentFiltering !== true)
 | |
| 			$content = apply_filters("widget_text_content", $content);
 | |
| 
 | |
| 		self::$cachePostContent[$postID] = $content;
 | |
| 
 | |
| 		return ($content);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * get next or previous post
 | |
| 	 */
 | |
| 	public static function getNextPrevPostData($type = "next", $taxonomy = "category"){
 | |
| 
 | |
| 		if(empty($taxonomy))
 | |
| 			$taxonomy = "category";
 | |
| 
 | |
| 		if(empty($type))
 | |
| 			$type = "next";
 | |
| 
 | |
| 		$previous = !($type == "next");
 | |
| 
 | |
| 		if($previous && is_attachment()){
 | |
| 			$post = get_post(get_post()->post_parent);
 | |
| 		}else{
 | |
| 			$in_same_term = false;
 | |
| 			$excluded_terms = '';
 | |
| 
 | |
| 			$post = get_adjacent_post($in_same_term, $excluded_terms, $previous, $taxonomy);
 | |
| 		}
 | |
| 
 | |
| 		if(empty($post))
 | |
| 			return (null);
 | |
| 
 | |
| 		$title = $post->post_title;
 | |
| 
 | |
| 		$link = get_permalink($post);
 | |
| 
 | |
| 		$output = array();
 | |
| 
 | |
| 		$output["title"] = $title;
 | |
| 		$output["link"] = $link;
 | |
| 
 | |
| 		return ($output);
 | |
| 	}
 | |
| 
 | |
| 	public static function a__________POST_ACTIONS_________(){
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * update post type
 | |
| 	 */
 | |
| 	public static function updatePost($postID, $arrUpdate){
 | |
| 
 | |
| 		if(empty($arrUpdate))
 | |
| 			UniteFunctionsUC::throwError("nothing to update post");
 | |
| 
 | |
| 		$arrUpdate["ID"] = $postID;
 | |
| 
 | |
| 		$wpError = wp_update_post($arrUpdate, true);
 | |
| 
 | |
| 		if(is_wp_error($wpError)){
 | |
| 			UniteFunctionsUC::throwError("Error updating post: $postID");
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * add prefix to post permalink
 | |
| 	 */
 | |
| 	public static function addPrefixToPostName($postID, $prefix){
 | |
| 
 | |
| 		$post = get_post($postID);
 | |
| 		if(empty($post))
 | |
| 			return (false);
 | |
| 
 | |
| 		$postName = $post->post_name;
 | |
| 
 | |
| 		//check if already exists
 | |
| 		if(strpos($postName, $prefix) === 0)
 | |
| 			return (false);
 | |
| 
 | |
| 		$newPostName = $prefix . $postName;
 | |
| 
 | |
| 		$arrUpdate = array();
 | |
| 		$arrUpdate["post_name"] = $newPostName;
 | |
| 
 | |
| 		self::updatePost($postID, $arrUpdate);
 | |
| 
 | |
| 		$post = get_post($postID);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * update post ordering
 | |
| 	 */
 | |
| 	public static function updatePostOrdering($postID, $ordering){
 | |
| 
 | |
| 		$arrUpdate = array(
 | |
| 			'menu_order' => $ordering,
 | |
| 		);
 | |
| 
 | |
| 		self::updatePost($postID, $arrUpdate);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * update post content
 | |
| 	 */
 | |
| 	public static function updatePostContent($postID, $content){
 | |
| 
 | |
| 		$arrUpdate = array("post_content" => $content);
 | |
| 		self::updatePost($postID, $arrUpdate);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * update post page template attribute in meta
 | |
| 	 */
 | |
| 	public static function updatePageTemplateAttribute($pageID, $pageTemplate){
 | |
| 
 | |
| 		update_post_meta($pageID, "_wp_page_template", $pageTemplate);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * insert post
 | |
| 	 * params: [cat_slug, content]
 | |
| 	 */
 | |
| 	public static function insertPost($title, $alias, $params = array()){
 | |
| 
 | |
| 		$catSlug = UniteFunctionsUC::getVal($params, "cat_slug");
 | |
| 		$content = UniteFunctionsUC::getVal($params, "content");
 | |
| 		$isPage = UniteFunctionsUC::getVal($params, "ispage");
 | |
| 		$isPage = UniteFunctionsUC::strToBool($isPage);
 | |
| 
 | |
| 		$catID = null;
 | |
| 		if(!empty($catSlug)){
 | |
| 			$catID = self::getCatIDBySlug($catSlug);
 | |
| 			if(empty($catID))
 | |
| 				UniteFunctionsUC::throwError("Category id not found by slug: $catSlug");
 | |
| 		}
 | |
| 
 | |
| 		$isPostExists = self::isPostNameExists($alias);
 | |
| 
 | |
| 		if($isPostExists == true)
 | |
| 			UniteFunctionsUC::throwError("Post with name: <b> {$alias} </b> already exists");
 | |
| 
 | |
| 		$arguments = array();
 | |
| 		$arguments["post_title"] = $title;
 | |
| 		$arguments["post_name"] = $alias;
 | |
| 		$arguments["post_status"] = "publish";
 | |
| 
 | |
| 		if(!empty($content))
 | |
| 			$arguments["post_content"] = $content;
 | |
| 
 | |
| 		if(!empty($catID))
 | |
| 			$arguments["post_category"] = array($catID);
 | |
| 
 | |
| 		if($isPage == true)
 | |
| 			$arguments["post_type"] = "page";
 | |
| 
 | |
| 		$postType = UniteFunctionsUC::getVal($params, "post_type");
 | |
| 		if(!empty($postType))
 | |
| 			$arguments["post_type"] = $postType;
 | |
| 
 | |
| 		$newPostID = wp_insert_post($arguments, true);
 | |
| 
 | |
| 		if(is_wp_error($newPostID)){
 | |
| 			$errorMessage = $newPostID->get_error_message();
 | |
| 			UniteFunctionsUC::throwError($errorMessage);
 | |
| 		}
 | |
| 
 | |
| 		return ($newPostID);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * insert new page
 | |
| 	 */
 | |
| 	public static function insertPage($title, $alias, $params = array()){
 | |
| 
 | |
| 		$params["ispage"] = true;
 | |
| 
 | |
| 		$pageID = self::insertPost($title, $alias, $params);
 | |
| 
 | |
| 		return ($pageID);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * delete all post metadata
 | |
| 	 */
 | |
| 	public static function deletePostMetadata($postID){
 | |
| 
 | |
| 		$postID = (int)$postID;
 | |
| 
 | |
| 		$tablePostMeta = UniteProviderFunctionsUC::$tablePostMeta;
 | |
| 
 | |
| 		$db = self::getDB();
 | |
| 		$db->delete($tablePostMeta, "post_id=$postID");
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * delete multiple posts
 | |
| 	 */
 | |
| 	public static function deleteMultiplePosts($arrPostIDs){
 | |
| 
 | |
| 		if(empty($arrPostIDs))
 | |
| 			return (false);
 | |
| 
 | |
| 		if(is_array($arrPostIDs) == false)
 | |
| 			return (false);
 | |
| 
 | |
| 		foreach($arrPostIDs as $postID){
 | |
| 			self::deletePost($postID);
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * delete post
 | |
| 	 */
 | |
| 	public static function deletePost($postID){
 | |
| 
 | |
| 		wp_delete_post($postID, true);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * cache attachment images query calls. one call instead of many
 | |
| 	 * input - post array.
 | |
| 	 */
 | |
| 	public static function cachePostsAttachmentsQueries($arrPosts){
 | |
| 
 | |
| 		if(empty($arrPosts))
 | |
| 			return (false);
 | |
| 
 | |
| 		$arrAttachmentIDs = self::getPostsAttachmentsIDs($arrPosts);
 | |
| 
 | |
| 		if(empty($arrAttachmentIDs))
 | |
| 			return (false);
 | |
| 
 | |
| 		self::cachePostMetaQueries($arrAttachmentIDs);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * cache post meta queries by id's
 | |
| 	 */
 | |
| 	public static function cachePostMetaQueries($arrPostIDs){
 | |
| 
 | |
| 		if(empty($arrPostIDs))
 | |
| 			return (false);
 | |
| 
 | |
| 		_prime_post_caches($arrPostIDs);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * get post terms queries
 | |
| 	 */
 | |
| 	public static function cachePostsTermsQueries($arrPosts){
 | |
| 
 | |
| 		if(empty($arrPosts))
 | |
| 			return (false);
 | |
| 
 | |
| 		$arrIDs = array();
 | |
| 
 | |
| 		//single type for now
 | |
| 		$postType = null;
 | |
| 
 | |
| 		foreach($arrPosts as $post){
 | |
| 			if(empty($postType))
 | |
| 				$postType = $post->post_type;
 | |
| 
 | |
| 			$arrIDs[] = $post->ID;
 | |
| 		}
 | |
| 
 | |
| 		$arrTaxonomies = self::getPostTypeTaxomonies($postType);
 | |
| 
 | |
| 		if(empty($arrTaxonomies))
 | |
| 			return (false);
 | |
| 
 | |
| 		$arrTaxKeys = array_keys($arrTaxonomies);
 | |
| 
 | |
| 		//get all terms
 | |
| 
 | |
| 		$args = array();
 | |
| 		$args["fields"] = "all_with_object_id";
 | |
| 
 | |
| 		$arrTerms = wp_get_object_terms($arrIDs, $arrTaxKeys, $args);
 | |
| 
 | |
| 		$arrTermsByPosts = array();
 | |
| 
 | |
| 		foreach($arrTerms as $term){
 | |
| 			$postID = $term->object_id;
 | |
| 
 | |
| 			if(isset(GlobalsProviderUC::$arrPostTermsCache[$postID]) == false)
 | |
| 				$arrTermsByPosts[$postID] = array();
 | |
| 
 | |
| 			$taxonomy = $term->taxonomy;
 | |
| 
 | |
| 			$termID = $term->term_id;
 | |
| 
 | |
| 			GlobalsProviderUC::$arrPostTermsCache[$postID][$taxonomy][$termID] = $term;
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	public static function a__________ATTACHMENT________(){
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * get post featured image
 | |
| 	 * if not found - return null
 | |
| 	 * if found - return array of all images
 | |
| 	 */
 | |
| 	public static function getPostFeaturedImage($post, $size = self::THUMB_MEDIUM_LARGE){
 | |
| 
 | |
| 		if(is_numeric($post))
 | |
| 			$postID = $post;
 | |
| 		else
 | |
| 			$postID = $post->ID;
 | |
| 
 | |
| 		if(empty($post))
 | |
| 			return(null);
 | |
| 
 | |
| 		$attachmentID = self::getFeaturedImageID($post->ID);
 | |
| 
 | |
| 		if(empty($attachmentID))
 | |
| 			return(null);
 | |
| 
 | |
| 		$urlImage = self::getUrlAttachmentImage($attachmentID, $size);
 | |
| 
 | |
| 		return($urlImage);
 | |
| 	}
 | |
| 
 | |
| 
 | |
| 	/**
 | |
| 	 * get attachmet id's from post
 | |
| 	 */
 | |
| 	public static function getPostsAttachmentsIDs($arrPosts){
 | |
| 
 | |
| 		if(empty($arrPosts))
 | |
| 			return (false);
 | |
| 
 | |
| 		$arrIDs = array();
 | |
| 
 | |
| 		foreach($arrPosts as $post){
 | |
| 			$postID = $post->ID;
 | |
| 
 | |
| 			$featuredImageID = self::getFeaturedImageID($postID);
 | |
| 
 | |
| 			if(empty($featuredImageID))
 | |
| 				continue;
 | |
| 
 | |
| 			$arrIDs[] = $featuredImageID;
 | |
| 		}
 | |
| 
 | |
| 		return ($arrIDs);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * get first image id from content
 | |
| 	 */
 | |
| 	public static function getFirstImageIDFromContent($content){
 | |
| 
 | |
| 		$strSearch = "class=\"wp-image-";
 | |
| 
 | |
| 		$posImageClass = strpos($content, $strSearch);
 | |
| 
 | |
| 		if($posImageClass === false)
 | |
| 			return (null);
 | |
| 
 | |
| 		$posSearch2 = $posImageClass + strlen($strSearch);
 | |
| 
 | |
| 		$posIDEnd = strpos($content, "\"", $posSearch2);
 | |
| 
 | |
| 		if($posIDEnd === false)
 | |
| 			return (null);
 | |
| 
 | |
| 		$imageID = substr($content, $posSearch2, $posIDEnd - $posSearch2);
 | |
| 
 | |
| 		$imageID = (int)$imageID;
 | |
| 
 | |
| 		return ($imageID);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * get post thumb id from post id
 | |
| 	 */
 | |
| 	public static function getFeaturedImageID($postID){
 | |
| 
 | |
| 		$thumbID = get_post_thumbnail_id($postID);
 | |
| 				
 | |
| 		
 | |
| 		return ($thumbID);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 *
 | |
| 	 * get attachment image url
 | |
| 	 */
 | |
| 	public static function getUrlAttachmentImage($thumbID, $size = self::THUMB_FULL){
 | |
| 
 | |
| 		$handle = "thumb_{$thumbID}_{$size}";
 | |
| 
 | |
| 		if(isset(self::$arrUrlThumbCache[$handle]))
 | |
| 			return (self::$arrUrlThumbCache[$handle]);
 | |
| 
 | |
| 		//wpml integration - get translated media id for current language
 | |
| 
 | |
| 		$isWPML = UniteCreatorWpmlIntegrate::isWpmlExists();
 | |
| 
 | |
| 		if($isWPML)
 | |
| 			$thumbID = UniteCreatorWpmlIntegrate::getTranslatedAttachmentID($thumbID);
 | |
| 
 | |
| 		$arrImage = wp_get_attachment_image_src($thumbID, $size);
 | |
| 		if(empty($arrImage))
 | |
| 			return (false);
 | |
| 
 | |
| 		$url = UniteFunctionsUC::getVal($arrImage, 0);
 | |
| 
 | |
| 		self::$arrUrlThumbCache[$handle] = $url;
 | |
| 
 | |
| 		return ($url);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * get image data by url
 | |
| 	 */
 | |
| 	public static function getImageDataByUrl($urlImage){
 | |
| 
 | |
| 		$title = HelperUC::getTitleFromUrl($urlImage, "image");
 | |
| 
 | |
| 		$item = array();
 | |
| 		$item["image_id"] = "";
 | |
| 		$item["image"] = $urlImage;
 | |
| 		$item["thumb"] = $urlImage;
 | |
| 		$item["title"] = $title;
 | |
| 		$item["description"] = "";
 | |
| 
 | |
| 		return ($item);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * get product category image
 | |
| 	 */
 | |
| 	public static function getProductCatImage($productCatID){
 | |
| 
 | |
| 		$imageID = get_term_meta($productCatID, "thumbnail_id", true);
 | |
| 
 | |
| 		if(empty($imageID))
 | |
| 			return ("");
 | |
| 
 | |
| 		$urlImage = self::getUrlAttachmentImage($imageID, UniteFunctionsWPUC::THUMB_LARGE);
 | |
| 
 | |
| 		return ($urlImage);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * get attachment data
 | |
| 	 */
 | |
| 	public static function getAttachmentData($thumbID){
 | |
| 
 | |
| 		//try to return data by url
 | |
| 		/*
 | |
| 			if(is_numeric($thumbID) == false){
 | |
| 
 | |
| 				$urlImage = $thumbID;
 | |
| 				$thumbID = self::getAttachmentIDFromImageUrl($thumbID);
 | |
| 
 | |
| 				if(empty($thumbID)){
 | |
| 
 | |
| 					$imageData = self::getImageDataByUrl($urlImage);
 | |
| 
 | |
| 					return($imageData);
 | |
| 				}
 | |
| 			}
 | |
| 			*/
 | |
| 
 | |
| 		if(empty($thumbID))
 | |
| 			return (null);
 | |
| 
 | |
| 		if(is_numeric($thumbID) == false){
 | |
| 			$imageData = self::getImageDataByUrl($thumbID);
 | |
| 
 | |
| 			return ($imageData);
 | |
| 		}
 | |
| 
 | |
| 		$handle = "attachment_data_$thumbID";
 | |
| 		if(isset(self::$arrUrlAttachmentDataCache[$handle]))
 | |
| 			return (self::$arrUrlAttachmentDataCache[$handle]);
 | |
| 
 | |
| 		$post = get_post($thumbID);
 | |
| 		if(empty($post))
 | |
| 			return (null);
 | |
| 
 | |
| 		$title = wp_get_attachment_caption($thumbID);
 | |
| 
 | |
| 		$rawCaption = $title;
 | |
| 
 | |
| 		$item = array();
 | |
| 		$item["image_id"] = $post->ID;
 | |
| 		$item["image"] = $post->guid;
 | |
| 
 | |
| 		if(empty($title))
 | |
| 			$title = $post->post_title;
 | |
| 
 | |
| 		$rawTitle = $post->post_title;
 | |
| 
 | |
| 		$urlThumb = self::getUrlAttachmentImage($thumbID, self::THUMB_MEDIUM_LARGE);
 | |
| 		if(empty($urlThumb))
 | |
| 			$urlThumb = $post->guid;
 | |
| 
 | |
| 		$urlThumbLarge = self::getUrlAttachmentImage($thumbID, self::THUMB_LARGE);
 | |
| 		if(empty($urlThumbLarge))
 | |
| 			$urlThumbLarge = $urlThumb;
 | |
| 
 | |
| 		$item["thumb"] = $urlThumb;
 | |
| 		$item["thumb_large"] = $urlThumb;
 | |
| 
 | |
| 		$item["title"] = $title;
 | |
| 		$item["description"] = $post->post_content;
 | |
| 
 | |
| 		$item["raw_caption"] = $rawCaption;
 | |
| 		$item["raw_title"] = $rawTitle;
 | |
| 
 | |
| 		self::$arrUrlAttachmentDataCache[$handle] = $item;
 | |
| 
 | |
| 		return ($item);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * get thumbnail sizes array
 | |
| 	 */
 | |
| 	public static function getArrThumbSizes(){
 | |
| 
 | |
| 		if(!empty(self::$arrThumbSizesCache))
 | |
| 			return (self::$arrThumbSizesCache);
 | |
| 
 | |
| 		global $_wp_additional_image_sizes;
 | |
| 
 | |
| 		$arrWPSizes = get_intermediate_image_sizes();
 | |
| 		$arrSizes = array();
 | |
| 
 | |
| 		foreach($arrWPSizes as $size){
 | |
| 			
 | |
| 			$title = UniteFunctionsUC::convertHandleToTitle($size);
 | |
| 			
 | |
| 			$maxWidth = null;
 | |
| 			$maxHeight = null;
 | |
| 			$crop = false;
 | |
| 			
 | |
| 			//get max width from option or additional sizes array
 | |
| 			$arrSize = UniteFunctionsUC::getVal($_wp_additional_image_sizes, $size);
 | |
| 			
 | |
| 			if(!empty($arrSize)){
 | |
| 				$maxWidth = UniteFunctionsUC::getVal($arrSize, "width");
 | |
| 				$maxHeight = UniteFunctionsUC::getVal($arrSize, "height");
 | |
| 				
 | |
| 				$crop = UniteFunctionsUC::getVal($arrSize, "crop");
 | |
| 				$crop = UniteFunctionsUC::strToBool($crop);
 | |
| 			}
 | |
| 			
 | |
| 			if(empty($maxWidth)){
 | |
| 				$maxWidth = intval(get_option("{$size}_size_w"));
 | |
| 				$maxHeight = intval(get_option("{$size}_size_h"));
 | |
| 				$crop = boolval(get_option("{$size}_crop"));
 | |
| 			}
 | |
| 
 | |
| 			if(empty($maxWidth)){
 | |
| 				$arrSizes[$size] = $title;
 | |
| 				continue;
 | |
| 			}
 | |
| 
 | |
| 			//add the text addition
 | |
| 			if($crop === true)
 | |
| 				$addition = "({$maxWidth}x{$maxHeight})";
 | |
| 			else
 | |
| 				$addition = "(max width $maxWidth)";
 | |
| 
 | |
| 			$title .= " " . $addition;
 | |
| 
 | |
| 			$arrSizes[$size] = $title;
 | |
| 		}
 | |
| 
 | |
| 		$arrSizes["full"] = __("Full", "unlimited-elements-for-elementor");
 | |
| 
 | |
| 		//sort
 | |
| 		$arrNew = array();
 | |
| 
 | |
| 		$topKeys = array("full", "large", "medium_large", "medium", "thumbnail");
 | |
| 
 | |
| 		foreach($topKeys as $key){
 | |
| 			if(!isset($arrSizes[$key]))
 | |
| 				continue;
 | |
| 
 | |
| 			$arrNew[$key] = $arrSizes[$key];
 | |
| 			unset($arrSizes[$key]);
 | |
| 		}
 | |
| 
 | |
| 		$arrNew = array_merge($arrNew, $arrSizes);
 | |
| 		
 | |
| 		self::$arrThumbSizesCache = $arrNew;
 | |
| 
 | |
| 		return ($arrNew);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Get an attachment ID given a URL.
 | |
| 	 *
 | |
| 	 * @param string $url
 | |
| 	 *
 | |
| 	 * @return int Attachment ID on success, 0 on failure
 | |
| 	 */
 | |
| 	public static function getAttachmentIDFromImageUrl($url){
 | |
| 
 | |
| 		if(empty($url))
 | |
| 			return (null);
 | |
| 
 | |
| 		$attachment_id = 0;
 | |
| 
 | |
| 		$dir = wp_upload_dir();
 | |
| 
 | |
| 		if(false !== strpos($url, $dir['baseurl'] . '/')){ // Is URL in uploads directory?
 | |
| 
 | |
| 			$file = basename($url);
 | |
| 
 | |
| 			$query_args = array(
 | |
| 				'post_type' => 'attachment',
 | |
| 				'post_status' => 'inherit',
 | |
| 				'fields' => 'ids',
 | |
| 				'meta_query' => array(
 | |
| 					array(
 | |
| 						'value' => $file,
 | |
| 						'compare' => 'LIKE',
 | |
| 						'key' => '_wp_attachment_metadata',
 | |
| 					),
 | |
| 				),
 | |
| 			);
 | |
| 
 | |
| 			$query = new WP_Query($query_args);
 | |
| 
 | |
| 			if($query->have_posts()){
 | |
| 				foreach($query->posts as $post_id){
 | |
| 					$meta = wp_get_attachment_metadata($post_id);
 | |
| 
 | |
| 					$original_file = basename($meta['file']);
 | |
| 					$cropped_image_files = wp_list_pluck($meta['sizes'], 'file');
 | |
| 
 | |
| 					if($original_file === $file || in_array($file, $cropped_image_files)){
 | |
| 						$attachment_id = $post_id;
 | |
| 						break;
 | |
| 					}
 | |
| 				}
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		return $attachment_id;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * get attachment post title
 | |
| 	 */
 | |
| 	public static function getAttachmentPostTitle($post){
 | |
| 
 | |
| 		if(empty($post))
 | |
| 			return ("");
 | |
| 
 | |
| 		$post = (array)$post;
 | |
| 
 | |
| 		$title = UniteFunctionsUC::getVal($post, "post_title");
 | |
| 		$filename = UniteFunctionsUC::getVal($post, "guid");
 | |
| 
 | |
| 		if(empty($title))
 | |
| 			$title = $filename;
 | |
| 
 | |
| 		$info = pathinfo($title);
 | |
| 		$name = UniteFunctionsUC::getVal($info, "filename");
 | |
| 
 | |
| 		if(!empty($name))
 | |
| 			$title = $name;
 | |
| 
 | |
| 		return ($title);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * get attachment post alt
 | |
| 	 */
 | |
| 	public static function getAttachmentPostAlt($postID){
 | |
| 
 | |
| 		$alt = get_post_meta($postID, '_wp_attachment_image_alt', true);
 | |
| 
 | |
| 		return ($alt);
 | |
| 	}
 | |
| 
 | |
| 	public static function a___________USER_DATA__________(){
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 *
 | |
| 	 * validate permission that the user is admin, and can manage options.
 | |
| 	 */
 | |
| 	public static function isAdminPermissions(){
 | |
| 
 | |
| 		if(is_admin() && current_user_can("manage_options"))
 | |
| 			return (true);
 | |
| 
 | |
| 		return (false);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * check if current user has some permissions
 | |
| 	 */
 | |
| 	public static function isCurrentUserHasPermissions(){
 | |
| 
 | |
| 		$canEdit = current_user_can("manage_options");
 | |
| 
 | |
| 		return ($canEdit);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * get keys of user meta
 | |
| 	 */
 | |
| 	public static function getUserMetaKeys(){
 | |
| 
 | |
| 		$arrKeys = array(
 | |
| 			"first_name",
 | |
| 			"last_name",
 | |
| 			"description",
 | |
| 
 | |
| 			"billing_first_name",
 | |
| 			"billing_last_name",
 | |
| 			"billing_company",
 | |
| 			"billing_address_1",
 | |
| 			"billing_address_2",
 | |
| 			"billing_city",
 | |
| 			"billing_postcode",
 | |
| 			"billing_country",
 | |
| 			"billing_state",
 | |
| 			"billing_phone",
 | |
| 			"billing_email",
 | |
| 			"billing_first_name",
 | |
| 			"billing_last_name",
 | |
| 
 | |
| 			"shipping_company",
 | |
| 			"shipping_address_1",
 | |
| 			"shipping_address_2",
 | |
| 			"shipping_city",
 | |
| 			"shipping_postcode",
 | |
| 			"shipping_country",
 | |
| 			"shipping_state",
 | |
| 			"shipping_phone",
 | |
| 			"shipping_email",
 | |
| 		);
 | |
| 
 | |
| 		return ($arrKeys);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * get user avatar keys
 | |
| 	 */
 | |
| 	public static function getUserAvatarKeys(){
 | |
| 
 | |
| 		$arrKeys = array(
 | |
| 			"avatar_found",
 | |
| 			"avatar_url",
 | |
| 			"avatar_size",
 | |
| 		);
 | |
| 
 | |
| 		return ($arrKeys);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * get user meta
 | |
| 	 */
 | |
| 	public static function getUserMeta($userID, $arrMetaKeys = null, $addPrefixed = false){
 | |
| 
 | |
| 		$arrMeta = get_user_meta($userID, '', true);
 | |
| 
 | |
| 		if(empty($arrMeta))
 | |
| 			return (null);
 | |
| 
 | |
| 		$arrKeys = self::getUserMetaKeys();
 | |
| 
 | |
| 		if(is_array($arrMetaKeys) == false)
 | |
| 			$arrMetaKeys = array();
 | |
| 
 | |
| 		if(!empty($arrMetaKeys))
 | |
| 			$arrKeys = array_merge($arrKeys, $arrMetaKeys);
 | |
| 
 | |
| 		$arrMetaKeys = UniteFunctionsUC::arrayToAssoc($arrMetaKeys);
 | |
| 
 | |
| 		$arrOutput = array();
 | |
| 		foreach($arrKeys as $key){
 | |
| 			$metaValue = UniteFunctionsUC::getVal($arrMeta, $key);
 | |
| 
 | |
| 			if(is_array($metaValue))
 | |
| 				$metaValue = $metaValue[0];
 | |
| 
 | |
| 			//from the additional - try to unserialize
 | |
| 			if(isset($arrMetaKeys[$key]) && is_string($metaValue)){
 | |
| 				$arrOpened = maybe_unserialize($metaValue);
 | |
| 				if(!empty($arrOpened))
 | |
| 					$metaValue = $arrOpened;
 | |
| 			}
 | |
| 
 | |
| 			if($addPrefixed == true)
 | |
| 				$key = "cf_" . $key;
 | |
| 
 | |
| 			$arrOutput[$key] = $metaValue;
 | |
| 		}
 | |
| 
 | |
| 		return ($arrOutput);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * get user avatar data
 | |
| 	 */
 | |
| 	public static function getUserAvatarData($userID, $urlDefaultImage = ""){
 | |
| 
 | |
| 		$args = array();
 | |
| 
 | |
| 		if(!empty($urlDefaultImage))
 | |
| 			$args["default"] = $urlDefaultImage;
 | |
| 
 | |
| 		$arrAvatar = get_avatar_data($userID, $args);
 | |
| 
 | |
| 		$hasAvatar = UniteFunctionsUC::getVal($arrAvatar, "found_avatar");
 | |
| 		$size = UniteFunctionsUC::getVal($arrAvatar, "size");
 | |
| 		$url = UniteFunctionsUC::getVal($arrAvatar, "url");
 | |
| 
 | |
| 		$arrOutput = array();
 | |
| 		$arrOutput["avatar_found"] = $hasAvatar;
 | |
| 		$arrOutput["avatar_url"] = $url;
 | |
| 		$arrOutput["avatar_size"] = $size;
 | |
| 
 | |
| 		return ($arrOutput);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * get user data by object
 | |
| 	 */
 | |
| 	public static function getUserData($objUser, $getMeta = false, $getAvatar = false, $arrMetaKeys = null){
 | |
| 
 | |
| 		if(is_numeric($objUser))
 | |
| 			$objUser = get_user_by("id", $objUser);
 | |
| 
 | |
| 		$userID = $objUser->ID;
 | |
| 
 | |
| 		$urlPosts = get_author_posts_url($userID);
 | |
| 
 | |
| 		if($getMeta == true)
 | |
| 			$numPosts = count_user_posts($userID);
 | |
| 
 | |
| 		$userData = $objUser->data;
 | |
| 
 | |
| 		$userData = UniteFunctionsUC::convertStdClassToArray($userData);
 | |
| 
 | |
| 		$arrData = array();
 | |
| 		$arrData["id"] = UniteFunctionsUC::getVal($userData, "ID");
 | |
| 
 | |
| 		$username = UniteFunctionsUC::getVal($userData, "user_nicename");
 | |
| 
 | |
| 		$arrData["username"] = $username;
 | |
| 
 | |
| 		$name = get_the_author_meta( "display_name", $userID);	//allow with translated name as well
 | |
| 		
 | |
| 		if(empty($name))
 | |
| 			$name = $username;
 | |
| 
 | |
| 		if(empty($name))
 | |
| 			$name = UniteFunctionsUC::getVal($userData, "user_login");
 | |
| 
 | |
| 		$arrData["name"] = $name;
 | |
| 
 | |
| 		$arrData["user_login"] = UniteFunctionsUC::getVal($userData, "user_login");
 | |
| 
 | |
| 		$arrData["email"] = UniteFunctionsUC::getVal($userData, "user_email");
 | |
| 
 | |
| 		$arrData["url_posts"] = $urlPosts;
 | |
| 
 | |
| 		if($getMeta == true)
 | |
| 			$arrData["num_posts"] = $numPosts;
 | |
| 
 | |
| 		if($getAvatar == true){
 | |
| 			$arrAvatar = self::getUserAvatarData($userID);
 | |
| 			if(!empty($arrAvatar))
 | |
| 				$arrData = $arrData + $arrAvatar;
 | |
| 		}
 | |
| 
 | |
| 		//add role
 | |
| 		$arrRoles = $objUser->roles;
 | |
| 
 | |
| 		$role = "";
 | |
| 		if(!empty($arrRoles))
 | |
| 			$role = implode(",", $arrRoles);
 | |
| 
 | |
| 		$arrData["role"] = $role;
 | |
| 
 | |
| 		$urlWebsite = UniteFunctionsUC::getVal($userData, "user_url");
 | |
| 		$arrData["website"] = $urlWebsite;
 | |
| 
 | |
| 		//add meta
 | |
| 		if($getMeta == true){
 | |
| 			$arrMeta = self::getUserMeta($userID, $arrMetaKeys);
 | |
| 			if(!empty($arrMeta))
 | |
| 				$arrData = $arrData + $arrMeta;
 | |
| 		}
 | |
| 
 | |
| 		return ($arrData);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * get user data by id
 | |
| 	 * if user not found, return empty data
 | |
| 	 */
 | |
| 	public static function getUserDataById($userID, $getMeta = false, $getAvatar = false){
 | |
| 		
 | |
| 		if($userID == "loggedin_user")
 | |
| 			$objUser = wp_get_current_user();
 | |
| 		else{
 | |
| 			if(is_numeric($userID))
 | |
| 				$objUser = get_user_by("id", $userID);
 | |
| 			else
 | |
| 				$objUser = get_user_by("slug", $userID);
 | |
| 		}
 | |
| 
 | |
| 		//if emtpy user - return empty
 | |
| 		if(empty($objUser)){
 | |
| 			$arrEmpty = array();
 | |
| 			$arrEmpty["id"] = "";
 | |
| 			$arrEmpty["name"] = "";
 | |
| 			$arrEmpty["email"] = "";
 | |
| 
 | |
| 			return ($arrEmpty);
 | |
| 		}
 | |
| 
 | |
| 		$arrData = self::getUserData($objUser, $getMeta, $getAvatar);
 | |
| 		
 | |
| 		return ($arrData);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * get roles as name/value array
 | |
| 	 */
 | |
| 	public static function getRolesShort($addAll = false){
 | |
| 
 | |
| 		$objRoles = wp_roles();
 | |
| 
 | |
| 		$arrShort = $objRoles->role_names;
 | |
| 
 | |
| 		if($addAll == true){
 | |
| 			$arrAll["__all__"] = __("[All Roles]", "unlimited-elements-for-elementor");
 | |
| 			$arrShort = $arrAll + $arrShort;
 | |
| 		}
 | |
| 
 | |
| 		return ($arrShort);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * get menus list short - id / title
 | |
| 	 */
 | |
| 	public static function getMenusListShort(){
 | |
| 
 | |
| 		$arrShort = array();
 | |
| 
 | |
| 		$arrMenus = get_terms("nav_menu");
 | |
| 
 | |
| 		if(empty($arrMenus))
 | |
| 			return (array());
 | |
| 
 | |
| 		foreach($arrMenus as $menu){
 | |
| 			$menuID = $menu->term_id;
 | |
| 			$name = $menu->name;
 | |
| 
 | |
| 			$arrShort[$menuID] = $name;
 | |
| 		}
 | |
| 
 | |
| 		return ($arrShort);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * get users array short
 | |
| 	 */
 | |
| 	public static function getArrAuthorsShort($addCurrentUser = false){
 | |
| 
 | |
| 		if(!empty(self::$cacheAuthorsShort)){
 | |
| 			if($addCurrentUser){
 | |
| 				$arrUsers = UniteFunctionsUC::addArrFirstValue(self::$cacheAuthorsShort, "-- Logged In User --", "uc_loggedin_user");
 | |
| 
 | |
| 				return ($arrUsers);
 | |
| 			}
 | |
| 
 | |
| 			return (self::$cacheAuthorsShort);
 | |
| 		}
 | |
| 
 | |
| 		$args = array("role__not_in" => array("subscriber", "customer"));
 | |
| 
 | |
| 		$arrUsers = get_users($args);
 | |
| 
 | |
| 		$arrUsersShort = array();
 | |
| 
 | |
| 		$arrNames = array();
 | |
| 		$arrAlternative = array();
 | |
| 
 | |
| 		foreach($arrUsers as $objUser){
 | |
| 			$userID = $objUser->ID;
 | |
| 			$userData = $objUser->data;
 | |
| 			$name = $userData->display_name;
 | |
| 			if(empty($name))
 | |
| 				$name = $userData->user_nicename;
 | |
| 			if(empty($name))
 | |
| 				$name = $userData->user_login;
 | |
| 
 | |
| 			$login = $userData->user_login;
 | |
| 			$alternativeName = $name . " ({$login})";
 | |
| 
 | |
| 			//avoid duplicate names
 | |
| 
 | |
| 			if(isset($arrNames[$name])){
 | |
| 				$oridinalUserID = $arrNames[$name];
 | |
| 
 | |
| 				$arrUsersShort[$oridinalUserID] = $arrAlternative[$name];
 | |
| 
 | |
| 				$name = $alternativeName;
 | |
| 			}else{
 | |
| 				$arrAlternative[$name] = $alternativeName;
 | |
| 			}
 | |
| 
 | |
| 			$arrNames[$name] = $userID;
 | |
| 
 | |
| 			$arrUsersShort[$userID] = $name;
 | |
| 		}
 | |
| 
 | |
| 		self::$cacheAuthorsShort = $arrUsersShort;
 | |
| 
 | |
| 		if($addCurrentUser == true){
 | |
| 			$arrUsers = UniteFunctionsUC::addArrFirstValue(self::$cacheAuthorsShort, "-- Logged In User --", "uc_loggedin_user");
 | |
| 
 | |
| 			return ($arrUsers);
 | |
| 		}
 | |
| 
 | |
| 		return ($arrUsersShort);
 | |
| 	}
 | |
| 
 | |
| 	public static function a___________MENU__________(){
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * get menu items
 | |
| 	 */
 | |
| 	public static function getMenuItems($menuID, $isOnlyParents = false){
 | |
| 
 | |
| 		$objMenu = wp_get_nav_menu_object($menuID);
 | |
| 
 | |
| 		if(empty($objMenu))
 | |
| 			return (array());
 | |
| 
 | |
| 		$arrItems = wp_get_nav_menu_items($objMenu);
 | |
| 
 | |
| 		if(empty($arrItems))
 | |
| 			return (array());
 | |
| 
 | |
| 		$arrItemsData = array();
 | |
| 
 | |
| 		foreach($arrItems as $objItem){
 | |
| 			$item = array();
 | |
| 
 | |
| 			$parentID = $objItem->menu_item_parent;
 | |
| 
 | |
| 			if($isOnlyParents == true && !empty($parentID)){
 | |
| 				continue;
 | |
| 			}
 | |
| 
 | |
| 			$url = $objItem->url;
 | |
| 			$title = $objItem->title;
 | |
| 			$titleAttribute = $objItem->attr_title;
 | |
| 			$target = $objItem->target;
 | |
| 
 | |
| 			$item["id"] = $objItem->ID;
 | |
| 			$item["type"] = $objItem->type_label;
 | |
| 			$item["title"] = $objItem->title;
 | |
| 			$item["url"] = $objItem->url;
 | |
| 			$item["target"] = $objItem->target;
 | |
| 			$item["title_attribute"] = $objItem->attr_title;
 | |
| 			$item["description"] = $objItem->description;
 | |
| 
 | |
| 			$arrClasses = $objItem->classes;
 | |
| 
 | |
| 			$strClases = "";
 | |
| 			if(!empty($arrClasses))
 | |
| 				$strClases = implode(" ", $arrClasses);
 | |
| 
 | |
| 			$strClases = trim($strClases);
 | |
| 
 | |
| 			$item["classes"] = $strClases;
 | |
| 
 | |
| 			//make the html
 | |
| 
 | |
| 			$addHtml = "";
 | |
| 			if(!empty($target))
 | |
| 				$addHtml .= " target='$target'";
 | |
| 
 | |
| 			if(!empty($titleAttribute)){
 | |
| 				$titleAttribute = esc_attr($titleAttribute);
 | |
| 				$addHtml .= " title='$titleAttribute'";
 | |
| 			}
 | |
| 
 | |
| 			if(!empty($strClases))
 | |
| 				$addHtml .= " class='$strClases'";
 | |
| 
 | |
| 			$html = "<a href='{$url}' {$addHtml}>{$title}</a>";
 | |
| 
 | |
| 			$item["html_link"] = $html;
 | |
| 
 | |
| 			$arrItemsData[] = $item;
 | |
| 		}
 | |
| 
 | |
| 		return ($arrItemsData);
 | |
| 	}
 | |
| 
 | |
| 	private static function a_________________QUERY_VARS_____________(){}
 | |
| 
 | |
| 
 | |
| 	/**
 | |
| 	 * get current query vars
 | |
| 	 */
 | |
| 	public static function getCurrentQueryVars(){
 | |
| 
 | |
| 		global $wp_query;
 | |
| 
 | |
| 		if(empty($wp_query))
 | |
| 			return(array());
 | |
| 
 | |
| 		$currentQueryVars = $wp_query->query_vars;
 | |
| 
 | |
| 		return($currentQueryVars);
 | |
| 	}
 | |
| 
 | |
| 
 | |
| 	/**
 | |
| 	 * clean query args for debug
 | |
| 	 */
 | |
| 	public static function cleanQueryArgsForDebug($args){
 | |
| 
 | |
| 		$argsNew = array();
 | |
| 
 | |
| 		foreach($args as $name => $value){
 | |
| 			//keep
 | |
| 			switch($name){
 | |
| 				case "ignore_sticky_posts":
 | |
| 				case "suppress_filters":
 | |
| 
 | |
| 					$argsNew[$name] = $value;
 | |
| 					continue(2);
 | |
| 				break;
 | |
| 			}
 | |
| 
 | |
| 			if(empty($value))
 | |
| 				continue;
 | |
| 
 | |
| 			$argsNew[$name] = $value;
 | |
| 		}
 | |
| 
 | |
| 		return ($argsNew);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * print current query
 | |
| 	 */
 | |
| 	public static function printCurrentQuery($query = null){
 | |
| 
 | |
| 		if(empty($query)){
 | |
| 			global $wp_query;
 | |
| 			$query = $wp_query;
 | |
| 		}
 | |
| 
 | |
| 		$queryVars = $query->query_vars;
 | |
| 
 | |
| 		$queryVars = self::cleanQueryArgsForDebug($queryVars);
 | |
| 
 | |
| 		dmp("Current Query Is: ");
 | |
| 		dmp($queryVars);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * merge the query vars
 | |
| 	 */
 | |
| 	public static function mergeQueryVars($args1, $args2){
 | |
| 
 | |
| 		//merge the arrays
 | |
| 		$args = array();
 | |
| 
 | |
| 		foreach($args1 as $key=>$value){
 | |
| 
 | |
| 			if(is_array($value) == false)
 | |
| 				continue;
 | |
| 
 | |
| 			if(empty($value))
 | |
| 				continue;
 | |
| 
 | |
| 			$arrValue2 = UniteFunctionsUC::getVal($args2, $key);
 | |
| 
 | |
| 			if(is_array($arrValue2) == false)
 | |
| 				continue;
 | |
| 
 | |
| 			if(empty($arrValue2))
 | |
| 				continue;
 | |
| 
 | |
| 			if($key == "tax_query"){
 | |
| 
 | |
| 				$args1 = self::mergeArgsTaxQuery($args1, $arrValue2);
 | |
| 
 | |
| 				unset($args2[$key]);
 | |
| 
 | |
| 				continue;
 | |
| 			}
 | |
| 
 | |
| 			$value = array_merge($value, $arrValue2);
 | |
| 
 | |
| 			$args1[$key] = $value;
 | |
| 
 | |
| 			unset($args2[$key]);
 | |
| 
 | |
| 		}
 | |
| 
 | |
| 		$args = array_merge($args1,$args2);
 | |
| 
 | |
| 
 | |
| 		return($args);
 | |
| 	}
 | |
| 
 | |
| 	public static function a___________OTHER_FUNCTIONS__________(){
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * print registered includes
 | |
| 	 */
 | |
| 	public static function printRegisteredIncludes($type = "js"){
 | |
| 
 | |
| 		if($type == "css")
 | |
| 			$objScripts = wp_styles();
 | |
| 		else
 | |
| 			$objScripts = wp_scripts();
 | |
| 		
 | |
| 		if($type == "js")
 | |
| 			dmp("Registered scripts: ");
 | |
| 		else
 | |
| 			dmp("Registered styles: ");
 | |
| 		
 | |
| 		foreach( $objScripts->queue as $scriptName ){
 | |
| 
 | |
| 			$objScript = UniteFunctionsUC::getVal($objScripts->registered, $scriptName);
 | |
| 
 | |
| 			$url = $objScript->src;
 | |
| 			
 | |
| 			$deps = $objScript->deps;
 | |
| 			$strDeps = "";
 | |
| 			
 | |
| 			if(is_array($deps))
 | |
| 				$strDeps = implode(",", $deps);
 | |
| 					
 | |
| 			dmp("$scriptName | $url | $strDeps");
 | |
| 		}
 | |
| 
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * include some dependency in some script
 | |
| 	 */
 | |
| 	public static function removeIncludeScriptDep($depName){
 | |
| 		
 | |
| 		global $wp_scripts;
 | |
| 		
 | |
| 		foreach($wp_scripts->registered as $name=>$script){
 | |
| 			
 | |
| 			if(empty($script->deps))
 | |
| 				continue;
 | |
| 
 | |
| 			if(is_array($script->deps) == false)
 | |
| 				continue;
 | |
| 			
 | |
| 			foreach($script->deps as $key => $dep){
 | |
| 				
 | |
| 				if($dep == $depName){
 | |
| 					unset($wp_scripts->registered[$name]->deps[$key]);					
 | |
| 				}
 | |
| 									
 | |
| 			}
 | |
| 			
 | |
| 		}
 | |
| 		
 | |
| 		
 | |
| 	}
 | |
| 	
 | |
| 	/**
 | |
| 	 * find and remove some include
 | |
| 	 */
 | |
| 	public static function findAndRemoveInclude($filename, $isJS = true){
 | |
| 
 | |
| 		if($isJS == false)
 | |
| 			$objScripts = wp_styles();
 | |
| 		else
 | |
| 			$objScripts = wp_scripts();
 | |
| 
 | |
| 		if(empty($objScripts))
 | |
| 			return(false);
 | |
| 
 | |
| 		$arrDeleted = array();
 | |
| 		
 | |
| 		foreach( $objScripts->queue as $scriptName ){
 | |
| 
 | |
| 			$objScript = UniteFunctionsUC::getVal($objScripts->registered, $scriptName);
 | |
| 
 | |
| 			if(empty($objScript))
 | |
| 				continue;
 | |
| 
 | |
| 			$url = $objScript->src;
 | |
| 
 | |
| 			//find by handle
 | |
| 			$isFound = false;
 | |
| 
 | |
| 			if($scriptName == $filename)
 | |
| 				$isFound = true;
 | |
| 			else{
 | |
| 
 | |
| 				//find by url
 | |
| 
 | |
| 				$url = strtolower($url);
 | |
| 
 | |
| 				$isFound = strpos($url, $filename);
 | |
| 			}
 | |
| 
 | |
| 			if($isFound === false)
 | |
| 				continue;
 | |
| 
 | |
| 			$arrDeleted[] = $url;
 | |
| 
 | |
| 			if($isJS == true)
 | |
| 				wp_deregister_script( $scriptName );
 | |
| 			else
 | |
| 				wp_deregister_style( $scriptName );
 | |
| 			
 | |
| 		}
 | |
| 
 | |
| 
 | |
| 		return($arrDeleted);
 | |
| 	}
 | |
| 
 | |
| 
 | |
| 	/**
 | |
| 	 * set global author data variable
 | |
| 	 */
 | |
| 	public static function setGlobalAuthorData($post = null) {
 | |
| 
 | |
| 		global $authordata;
 | |
| 
 | |
| 		if(empty($post))
 | |
| 			$post = get_post();
 | |
| 
 | |
| 		$authordata = get_userdata( $post->post_author );
 | |
| 
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * get wordpress language
 | |
| 	 */
 | |
| 	public static function getLanguage(){
 | |
| 
 | |
| 		$locale = get_locale();
 | |
| 		if(is_string($locale) == false)
 | |
| 			return ("en");
 | |
| 
 | |
| 		$pos = strpos($locale, "_");
 | |
| 
 | |
| 		if($pos === false)
 | |
| 			return ($locale);
 | |
| 
 | |
| 		$lang = substr($locale, 0, $pos);
 | |
| 
 | |
| 		return ($lang);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * get install plugin slug
 | |
| 	 */
 | |
| 	public static function getInstallPluginLink($slug){
 | |
| 
 | |
| 		$action = 'install-plugin';
 | |
| 
 | |
| 		$urlInstall = wp_nonce_url(
 | |
| 			add_query_arg(
 | |
| 				array(
 | |
| 					'action' => $action,
 | |
| 					'plugin' => $slug,
 | |
| 				),
 | |
| 				admin_url('update.php')
 | |
| 			),
 | |
| 			$action . '_' . $slug
 | |
| 		);
 | |
| 
 | |
| 		return ($urlInstall);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * get queried object by type
 | |
| 	 * fill the empty objects by default objects
 | |
| 	 */
 | |
| 	public static function getQueriedObject($type = null, $defaultObjectID = null){
 | |
| 
 | |
| 		$data = get_queried_object();
 | |
| 
 | |
| 		switch($type){
 | |
| 			case "user":    //if not user fetched - get first user
 | |
| 				if(empty($data) || $data instanceof WP_User == false){
 | |
| 					if(!empty($defaultObjectID)){
 | |
| 						$data = get_user_by("id", $defaultObjectID);
 | |
| 
 | |
| 						return ($data);
 | |
| 					}
 | |
| 
 | |
| 					//get first object
 | |
| 					$arrUsers = get_users(array("number" => 1));
 | |
| 					if(empty($arrUsers))
 | |
| 						return (false);
 | |
| 
 | |
| 					$data = $arrUsers[0];
 | |
| 
 | |
| 					return ($data);
 | |
| 				}
 | |
| 			break;
 | |
| 		}
 | |
| 
 | |
| 		return ($data);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * check if archive location
 | |
| 	 */
 | |
| 	public static function isArchiveLocation(){
 | |
| 
 | |
| 		if(is_singular())
 | |
| 			return (false);
 | |
| 
 | |
| 		if((is_archive() || is_tax() || is_home() || is_search()))
 | |
| 			return (true);
 | |
| 
 | |
| 		if(class_exists("UniteCreatorElementorIntegrate")){
 | |
| 			$templateType = UniteCreatorElementorIntegrate::getCurrentTemplateType();
 | |
| 			if($templateType == "archive")
 | |
| 				return (true);
 | |
| 		}
 | |
| 
 | |
| 		return (false);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * get max menu order
 | |
| 	 */
 | |
| 	public static function getMaxMenuOrder($postType, $parentID = null){
 | |
| 
 | |
| 		$tablePosts = UniteProviderFunctionsUC::$tablePosts;
 | |
| 
 | |
| 		$db = self::getDB();
 | |
| 
 | |
| 		$query = "select MAX(menu_order) as maxorder from {$tablePosts} where post_type='$postType'";
 | |
| 
 | |
| 		if(!empty($parentID)){
 | |
| 			$parentID = (int)$parentID;
 | |
| 			$query .= " and post_parent={$parentID}";
 | |
| 		}
 | |
| 
 | |
| 		$rows = $db->fetchSql($query);
 | |
| 
 | |
| 		$maxOrder = 0;
 | |
| 		if(count($rows) > 0)
 | |
| 			$maxOrder = $rows[0]["maxorder"];
 | |
| 
 | |
| 		if(!is_numeric($maxOrder))
 | |
| 			$maxOrder = 0;
 | |
| 
 | |
| 		return ($maxOrder);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 *
 | |
| 	 * get wp-content path
 | |
| 	 */
 | |
| 	public static function getPathUploads(){
 | |
| 
 | |
| 		if(is_multisite()){
 | |
| 			if(!defined("BLOGUPLOADDIR")){
 | |
| 				$pathBase = self::getPathBase();
 | |
| 				$pathContent = $pathBase . "wp-content/uploads/";
 | |
| 			}else
 | |
| 				$pathContent = BLOGUPLOADDIR;
 | |
| 		}else{
 | |
| 			$pathContent = WP_CONTENT_DIR;
 | |
| 			if(!empty($pathContent)){
 | |
| 				$pathContent .= "/";
 | |
| 			}else{
 | |
| 				$pathBase = self::getPathBase();
 | |
| 				$pathContent = $pathBase . "wp-content/uploads/";
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		return ($pathContent);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 *
 | |
| 	 * simple enqueue script
 | |
| 	 */
 | |
| 	public static function addWPScript($scriptName){
 | |
| 
 | |
| 		wp_enqueue_script($scriptName);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 *
 | |
| 	 * simple enqueue style
 | |
| 	 */
 | |
| 	public static function addWPStyle($styleName){
 | |
| 
 | |
| 		wp_enqueue_style($styleName);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * add shortcode
 | |
| 	 */
 | |
| 	public static function addShortcode($shortcode, $function){
 | |
| 
 | |
| 		add_shortcode($shortcode, $function);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 *
 | |
| 	 * add all js and css needed for media upload
 | |
| 	 */
 | |
| 	public static function addMediaUploadIncludes(){
 | |
| 
 | |
| 		self::addWPScript("thickbox");
 | |
| 		self::addWPStyle("thickbox");
 | |
| 		self::addWPScript("media-upload");
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * check if post exists by title
 | |
| 	 */
 | |
| 	public static function isPostExistsByTitle($title, $postType = "page"){
 | |
| 
 | |
| 		$post = get_page_by_title($title, ARRAY_A, $postType);
 | |
| 
 | |
| 		return !empty($post);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * tells if the page is posts of pages page
 | |
| 	 */
 | |
| 	public static function isAdminPostsPage(){
 | |
| 
 | |
| 		$screen = get_current_screen();
 | |
| 		$screenID = $screen->base;
 | |
| 		if(empty($screenID))
 | |
| 			$screenID = $screen->id;
 | |
| 
 | |
| 		if($screenID != "page" && $screenID != "post")
 | |
| 			return (false);
 | |
| 
 | |
| 		return (true);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 *
 | |
| 	 * register widget (must be class)
 | |
| 	 */
 | |
| 	public static function registerWidget($widgetName){
 | |
| 
 | |
| 		add_action('widgets_init', create_function('', 'return register_widget("' . $widgetName . '");'));
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * get admin title
 | |
| 	 */
 | |
| 	public static function getAdminTitle($customTitle){
 | |
| 
 | |
| 		global $title;
 | |
| 
 | |
| 		if(!empty($customTitle))
 | |
| 			$title = $customTitle;
 | |
| 		else
 | |
| 			get_admin_page_title();
 | |
| 
 | |
| 		$title = esc_html(strip_tags($title));
 | |
| 
 | |
| 		if(is_network_admin()){
 | |
| 			/* translators: Network admin screen title. 1: Network name */
 | |
| 			$admin_title = sprintf(__('Network Admin: %s'), esc_html(get_network()->site_name));
 | |
| 		}elseif(is_user_admin()){
 | |
| 			/* translators: User dashboard screen title. 1: Network name */
 | |
| 			$admin_title = sprintf(__('User Dashboard: %s'), esc_html(get_network()->site_name));
 | |
| 		}else{
 | |
| 			$admin_title = get_bloginfo('name');
 | |
| 		}
 | |
| 
 | |
| 		if($admin_title == $title){
 | |
| 			/* translators: Admin screen title. 1: Admin screen name */
 | |
| 			$admin_title = sprintf(__('%1$s — WordPress'), $title);
 | |
| 		}else{
 | |
| 			/* translators: Admin screen title. 1: Admin screen name, 2: Network or site name */
 | |
| 			$admin_title = sprintf(__('%1$s ‹ %2$s — WordPress'), $title, $admin_title);
 | |
| 		}
 | |
| 
 | |
| 		return ($admin_title);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * get all filters callbacks
 | |
| 	 */
 | |
| 	public static function getFilterCallbacks($tag){
 | |
| 
 | |
| 		global $wp_filter;
 | |
| 		if(isset($wp_filter[$tag]) == false)
 | |
| 			return (array());
 | |
| 
 | |
| 		$objFilter = $wp_filter[$tag];
 | |
| 
 | |
| 		$arrCallbacks = $objFilter->callbacks;
 | |
| 		if(empty($arrCallbacks))
 | |
| 			return (array());
 | |
| 
 | |
| 		return ($arrCallbacks);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * get action functions of some tag
 | |
| 	 */
 | |
| 	public static function getActionFunctionsKeys($tag){
 | |
| 
 | |
| 		$arrCallbacks = self::getFilterCallbacks($tag);
 | |
| 
 | |
| 		if(empty($arrCallbacks))
 | |
| 			return(array());
 | |
| 
 | |
| 		$arrFunctions = array();
 | |
| 
 | |
| 		foreach($arrCallbacks as $priority => $callbacks){
 | |
| 			$arrKeys = array_keys($callbacks);
 | |
| 
 | |
| 			foreach($arrKeys as $key){
 | |
| 				$arrFunctions[$key] = true;
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		return ($arrFunctions);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * show action functions
 | |
| 	 */
 | |
| 	public static function showActionFunctionsKeys($tag){
 | |
| 
 | |
| 		$arrActions = self::getActionFunctionsKeys($tag);
 | |
| 
 | |
| 		if(empty($arrActions))
 | |
| 			return(false);
 | |
| 
 | |
| 		dmp($arrActions);
 | |
| 
 | |
| 	}
 | |
| 
 | |
| 
 | |
| 	/**
 | |
| 	 * clear filters from functions
 | |
| 	 */
 | |
| 	public static function clearFiltersFromFunctions($tag, $arrFunctionsAssoc){
 | |
| 
 | |
| 		global $wp_filter;
 | |
| 		if(isset($wp_filter[$tag]) == false)
 | |
| 			return (false);
 | |
| 
 | |
| 		if(empty($arrFunctionsAssoc))
 | |
| 			return (false);
 | |
| 
 | |
| 		$objFilter = $wp_filter[$tag];
 | |
| 
 | |
| 		$arrFunctions = array();
 | |
| 		$arrCallbacks = $objFilter->callbacks;
 | |
| 		if(empty($arrCallbacks))
 | |
| 			return (array());
 | |
| 
 | |
| 		foreach($arrCallbacks as $priority => $callbacks){
 | |
| 			$arrKeys = array_keys($callbacks);
 | |
| 
 | |
| 			foreach($arrKeys as $key){
 | |
| 				if(isset($arrFunctionsAssoc[$key]))
 | |
| 					unset($wp_filter[$tag]->callbacks[$priority][$key]);
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * get blog url
 | |
| 	 */
 | |
| 	public static function getUrlBlog(){
 | |
| 
 | |
| 		//home page:
 | |
| 
 | |
| 		$showOnFront = get_option('show_on_front');
 | |
| 		if($showOnFront != "page"){
 | |
| 			$urlBlog = home_url();
 | |
| 
 | |
| 			return ($urlBlog);
 | |
| 		}
 | |
| 
 | |
| 		//page is missing:
 | |
| 
 | |
| 		$pageForPosts = get_option('page_for_posts');
 | |
| 		if(empty($pageForPosts)){
 | |
| 			$urlBlog = home_url('/?post_type=post');
 | |
| 
 | |
| 			return ($urlBlog);
 | |
| 		}
 | |
| 
 | |
| 		//some page:
 | |
| 		$urlBlog = self::getPermalink($pageForPosts);
 | |
| 
 | |
| 		return ($urlBlog);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * get current page url
 | |
| 	 */
 | |
| 	public static function getUrlCurrentPage($isClear = false){
 | |
| 
 | |
| 		global $wp;
 | |
| 		$urlPage = home_url($wp->request);
 | |
| 
 | |
| 		if($isClear == false)
 | |
| 			return ($urlPage);
 | |
| 
 | |
| 		$page = get_query_var("paged");
 | |
| 
 | |
| 		if(empty($page))
 | |
| 			return ($urlPage);
 | |
| 
 | |
| 		$urlPage = str_replace("/page/$page", "/", $urlPage);
 | |
| 
 | |
| 		return ($urlPage);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * get permalist with check of https
 | |
| 	 */
 | |
| 	public static function getPermalink($post){
 | |
| 
 | |
| 		$url = get_permalink($post);
 | |
| 		
 | |
| 		if(GlobalsUC::$is_ssl == true)
 | |
| 			$url = UniteFunctionsUC::urlToSsl($url);
 | |
| 
 | |
| 		return ($url);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * tell wp plugins do not cache the page
 | |
| 	 */
 | |
| 	public static function preventCachingPage(){
 | |
| 
 | |
| 		$arrNotCacheTags = array("DONOTCACHEPAGE", "DONOTCACHEDB", "DONOTMINIFY", "DONOTCDN");
 | |
| 
 | |
| 		foreach($arrNotCacheTags as $tag){
 | |
| 			if(defined($tag))
 | |
| 				continue;
 | |
| 
 | |
| 			define($tag, true);
 | |
| 		}
 | |
| 
 | |
| 		nocache_headers();
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * get all action keys
 | |
| 	 */
 | |
| 	public static function getAllWPActionKeys($action){
 | |
| 
 | |
| 		global $wp_filter;
 | |
| 
 | |
| 		$initFuncs = UniteFunctionsUC::getVal($wp_filter, "admin_init");
 | |
| 		$callbacks = $initFuncs->callbacks;
 | |
| 
 | |
| 		$arrAllKeys = array();
 | |
| 
 | |
| 		foreach($callbacks as $arrCallbacks){
 | |
| 			$arrKeys = array_keys($arrCallbacks);
 | |
| 
 | |
| 			$arrAllKeys = array_merge($arrAllKeys, $arrKeys);
 | |
| 		}
 | |
| 
 | |
| 		return ($arrAllKeys);
 | |
| 	}
 | |
| 
 | |
| 
 | |
| }  //end of the class
 | |
| 
 | |
| //init the static vars
 | |
| UniteFunctionsWPUC::initStaticVars();
 | |
| 
 | |
| ?>
 |