my );
if(is_object($get_taxonomy)){
$post_types = $get_taxonomy->object_type;
if ( isset( $query->query_vars['post_type'] )){
if(is_array( $query->query_vars['post_type'] )){
$post_types = array_filter(array_merge($query->query_vars['post_type'],$post_types));
}elseif(is_string( $query->query_vars['post_type'] )){
$original_post_type = $query->query_vars['post_type'];
$get_post_type_object = get_post_type_object( $original_post_type );
if(is_object($get_post_type_object)){
if((int)$get_post_type_object->public === 0){
return $query;
}
}
$post_types[] = $query->query_vars['post_type'];
}
$new_post_object = $post_types;
}else{
$new_post_object = $post_types;
}
$query->query_vars['post_type'] = $new_post_object;
}
}
}
return $query;
}
/**
* Load translations
*/
public static function init_translation() {
load_plugin_textdomain( 'simple-tags', false, basename( STAGS_DIR ) . '/languages' );
}
/**
* Register taxonomy post_tags for page post type
*
* @return void
* @author WebFactory Ltd
*/
public static function init() {
register_taxonomy_for_object_type( 'post_tag', 'page' );
}
/**
* Add page post type during the query
*
* @param WP_Query $query
*
* @return void
* @author WebFactory Ltd
*/
public static function parse_query( $query ) {
if(function_exists('get_current_screen')){
$screen = get_current_screen();
}
if(isset($screen->id) && $screen->id == 'edit-post'){
return $query;
}
if ( $query->is_tag == true ) {
if ( isset( $query->query_vars['post_type'] ) && is_array( $query->query_vars['post_type'] ) ) {
$query->query_vars['post_type'][] = 'page';
}else{
$query->query_vars['post_type'] = array( 'post', 'page' );
}
}
}
/**
* Randomize an array and keep association
*
* @param array $array
*
* @return boolean
*/
public static function random_array( &$array ) {
if ( ! is_array( $array ) || empty( $array ) ) {
return false;
}
$keys = array_keys( $array );
shuffle( $keys );
$new = array();
foreach ( (array) $keys as $key ) {
$new[ $key ] = $array[ $key ];
}
$array = $new;
return true;
}
/**
* Build rel for tag link
*
* @return string
*/
public static function get_rel_attribut() {
global $wp_rewrite;
$rel = ( is_object( $wp_rewrite ) && $wp_rewrite->using_permalinks() ) ? 'tag' : ''; // Tag ?
if ( ! empty( $rel ) ) {
$rel = 'rel="' . $rel . '"'; // Add HTML Tag
}
return $rel;
}
/**
* Retrieve the post count for a term across all taxonomies.
*
* This function queries terms based on the given term name and returns the number of posts associated with the first matching term.
* It does not require specifying a taxonomy and will search across all public taxonomies.
*
* @param string $item
* @return int The number of posts associated with the first matching term. Returns 0 if no term is found or if it has no posts.
*/
public static function get_term_post_counts( $item ) {
$terms = get_terms( array(
'name' => strip_tags($item),
'hide_empty' => false,
'fields' => 'all',
'number' => 1,
) );
// If terms exist, return the first matching term's count
if ( ! empty( $terms ) && ! is_wp_error( $terms ) ) {
return $terms[0]->count;
}
return 0;
}
/**
* Format data for output
*
* @param string $html_class
* @param string $format
* @param string $title
* @param string|array $content
* @param boolean $copyright
* @param string $separator
*
* @return string|array
*/
public static function output_content( $html_class = '', $format = 'list', $title = '', $content = '', $copyright = true, $separator = '', $div_class = '', $a_class = '', $before = '', $after = '', $taxonomy = '') {
if ( empty( $content ) ) {
return ''; // return nothing
}
if ( $format == 'array' && is_array( $content ) ) {
return $content; // Return PHP array if format is array
}
$title = taxopress_sanitize_text_field($title);
if ( is_array( $content ) ) {
switch ( $format ) {
case 'list' :
$output = ''. $before .'
' . "\n\t" . '' . implode( " \n\t", $content ) . " \n {$after}\n";
break;
case 'ol' :
$output = ''. $before .' ' . "\n\t" . '' . implode( " \n\t", $content ) . " \n {$after}\n";
break;
case 'comma':
$output = ''. ''. ''. ''. $before . implode(', ', $content) . " {$after}\n";
break;
case 'table' :
$output = $before . '' . "\n\t";
$count = 0;
foreach ($content as $item) {
$term_name = strip_tags($item);
$post_count = self::get_term_post_counts( $term_name );
if ( $post_count === 0 ) {
continue;
}
$display_class = $count >= 6 ? 'hidden' : '';
$output .= '' . $item . ' ' . $post_count . ' ' . "\n\t";
$count++;
}
if ($count > 6) {
$output .= '';
$output .= 'see more ';
$output .= 'close table ';
$output .= ' ' . "\n";
}
$output .= "
" . $after . "\n";
break;
case 'border':
$output = ''. $before .' ' . "\n\t" . implode( "{$separator}\n", $content ) . " {$after}
\n";
break;
case 'box':
$output = ''. $before .' ' . "\n\t" . implode( "{$separator}\n", $content ) . " {$after}
\n";
break;
case 'parent/child':
$output = $before . '' . "\n";
// Cache term hierarchy to avoid repeated queries
static $term_hierarchy = [];
$cache_key = md5($taxonomy . serialize($content));
if (!isset($term_hierarchy[$cache_key])) {
$terms_by_parent = [];
$all_terms = [];
$term_names = array_map(function($term_html) {
return strip_tags($term_html);
}, array_filter($content, 'trim'));
if (!empty($term_names)) {
$terms = get_terms([
'taxonomy' => $taxonomy,
'name' => $term_names,
'hide_empty' => false,
'update_term_meta_cache' => false
]);
if (!is_wp_error($terms)) {
foreach ($terms as $term) {
$all_terms[$term->term_id] = [
'term' => $term,
'html' => $content[array_search($term->name, $term_names)],
'is_parent' => false
];
$parent_id = $term->parent ?: '0';
$terms_by_parent[$parent_id][] = $term->term_id;
}
foreach ($terms_by_parent as $child_ids) {
foreach ($child_ids as $child_id) {
if (isset($terms_by_parent[$child_id])) {
$all_terms[$child_id]['is_parent'] = true;
}
}
}
}
}
$term_hierarchy[$cache_key] = [
'terms' => $all_terms,
'hierarchy' => $terms_by_parent
];
}
// Use cached hierarchy
$data = $term_hierarchy[$cache_key];
$all_terms = $data['terms'];
$terms_by_parent = $data['hierarchy'];
// Group terms by parent
$terms_by_parent = [];
$all_terms = [];
// First pass - collect all terms
foreach ($content as $term_html) {
if (empty(trim($term_html))) continue;
$term_name = strip_tags($term_html);
$term = get_term_by('name', $term_name, $taxonomy);
if (!$term) continue;
// Store term for reference
$all_terms[$term->term_id] = [
'term' => $term,
'html' => $term_html,
'is_parent' => false
];
$parent_id = $term->parent ?: '0';
if (!isset($terms_by_parent[$parent_id])) {
$terms_by_parent[$parent_id] = [];
}
$terms_by_parent[$parent_id][] = $term->term_id;
}
foreach ($terms_by_parent as $parent_id => $children) {
foreach ($children as $child_id) {
if (isset($terms_by_parent[$child_id])) {
$all_terms[$child_id]['is_parent'] = true;
}
}
}
$output_term = function($term_id, $level = 0) use (&$output_term, &$all_terms, &$terms_by_parent) {
if (!isset($all_terms[$term_id])) return '';
$term_data = $all_terms[$term_id];
$html = str_repeat("\t", $level);
$html .= '' . $term_data['html'];
if (isset($terms_by_parent[$term_id])) {
$html .= "\n" . str_repeat("\t", $level + 1);
$html .= '' . "\n";
foreach ($terms_by_parent[$term_id] as $child_id) {
$html .= $output_term($child_id, $level + 2);
}
$html .= str_repeat("\t", $level + 1) . " \n";
}
$html .= str_repeat("\t", $level) . " \n";
return $html;
};
$display_mode = isset($current['display_mode']) ? $current['display_mode'] : 'parents_and_sub';
if ($display_mode === 'parents_only') {
foreach ($all_terms as $term_id => $term_data) {
if ($term_data['is_parent']) {
$output .= '' . $term_data['html'] . " \n";
}
}
} elseif ($display_mode === 'sub_terms_only') {
foreach ($all_terms as $term_id => $term_data) {
if ($term_data['term']->parent > 0) {
$output .= '' . $term_data['html'] . " \n";
}
}
} else {
// Display full hierarchy
// Start with root terms or terms whose parents aren't in our set
foreach ($all_terms as $term_id => $term_data) {
$term = $term_data['term'];
if ($term->parent === 0 || !isset($all_terms[$term->parent])) {
$output .= $output_term($term_id);
}
}
}
$output .= " " . $after . "\n";
return $output;
break;
default :
$output = ''. $before .' ' . "\n\t" . implode( "{$separator}\n", $content ) . " {$after}
\n";
break;
}
} else {
$content = trim( $content );
switch ( $format ) {
case 'string' :
$output = $content;
break;
case 'list' :
$output = ''. $before .' ' . "\n\t" . '' . $content . " \n\t" . " {$after}\n";
break;
case 'comma':
$output = ''. ''. ''. ''. $before . $content . " {$after}\n";
break;
case 'table':
$output = $before . '' . "\n\t"
. '' . $content . ' ' . "\n\t"
. "
" . $after . "\n";
break;
case 'border':
$output = ''. $before .' ' . "\n\t" . $content . " {$after}
\n";
break;
case 'box':
$output = ''. $before .' ' . "\n\t" . $content . " {$after}
\n";
break;
case 'parent/child':
$output = $before . '' . "\n";
$lines = explode("\n", $content);
$inside_sublist = false;
foreach ($lines as $line) {
$line = trim($line);
if (empty($line)) {
continue;
}
if (strpos($line, 'taxopress-parent-term') !== false) {
if ($inside_sublist) {
$output .= " \n";
$inside_sublist = false;
}
$output .= '' . $line;
$output .= "\n\n";
$inside_sublist = true;
} else {
$output .= '' . $line . " \n";
}
}
// Close any open tags
if ($inside_sublist) {
$output .= " \n";
}
$output .= "" . $after . "\n";
break;
default :
$output = ''. $before .' ' . "\n\t" . $content . " {$after}
\n";
break;
}
}
//wrap class
if(!empty(trim($div_class))){
$wrap_div_class_open = '';
$wrap_div_class_close = '
';
}else{
$wrap_div_class_open = ' ';
$wrap_div_class_close = '
';
}
// Replace false by empty
$title = trim( $title );
if ( strtolower( $title ) == 'false' ) {
$title = '';
}
// Put title if exist
if ( ! empty( $title ) ) {
$title .= "\n\t";
}
if ( $copyright === true ) {
return "\n" . '' . "\n\t" . $wrap_div_class_open . $title . $output . $wrap_div_class_close . "\n";
} else {
return "\n\t" . $wrap_div_class_open . $title . $output . $wrap_div_class_close . "\n";
}
}
/**
* Remplace marker by dynamic values (use for related tags, current tags and tag cloud)
*
* @param string $element_loop
* @param object $term
* @param string $rel
* @param integer $scale_result
* @param integer $scale_max
* @param integer $scale_min
* @param integer $largest
* @param integer $smallest
* @param string $unit
* @param string $maxcolor
* @param string $mincolor
*
* @return string
*/
public static function format_internal_tag( $element_loop = '', $term = null, $rel = '', $scale_result = 0, $scale_max = null, $scale_min = 0, $largest = 0, $smallest = 0, $unit = '', $maxcolor = '', $mincolor = '' ) {
// Need term object
$tag_link = get_term_link( $term, $term->taxonomy );
$element_loop = str_replace( '%tag_link%', esc_url( $tag_link ), $element_loop );
$element_loop = str_replace( '%tag_feed%', esc_url( get_term_feed_link( $term->term_id, $term->taxonomy, '' ) ), $element_loop );
$element_loop = str_replace( '%tag_name%', esc_html( $term->name ), $element_loop );
$element_loop = str_replace( '%tag_name_attribute%', esc_html( strip_tags( $term->name ) ), $element_loop );
$element_loop = str_replace( '%tag_id%', $term->term_id, $element_loop );
$element_loop = str_replace( '%tag_count%', (int) $term->count, $element_loop );
// Need rel
$element_loop = str_replace( '%tag_rel%', $rel, $element_loop );
// Need max/min/scale and other :)
if ( $scale_result !== null ) {
$scale_result = (int) $scale_result;
$scale_min = (int) $scale_min;
$scale_max = (int) $scale_max;
$largest = (int) $largest;
$smallest = (int) $smallest;
$element_loop = str_replace( '%tag_size%', 'font-size:' . self::round( ( $scale_result - $scale_min ) * ( $largest - $smallest ) / ( $scale_max - $scale_min ) + $smallest, 2 ) . $unit . ';', $element_loop );
$element_loop = str_replace( '%tag_color%', 'color:' . self::get_color_by_scale( self::round( ( $scale_result - $scale_min ) * ( 100 ) / ( $scale_max - $scale_min ), 2 ), $mincolor, $maxcolor ) . ';', $element_loop );
$element_loop = str_replace( '%tag_scale%', $scale_result, $element_loop );
}
// External link
$element_loop = str_replace( '%tag_technorati%', self::format_external_tag( 'technorati', $term->name ), $element_loop );
$element_loop = str_replace( '%tag_flickr%', self::format_external_tag( 'flickr', $term->name ), $element_loop );
$element_loop = str_replace( '%tag_delicious%', self::format_external_tag( 'delicious', $term->name ), $element_loop );
return $element_loop;
}
/**
* This is pretty filthy. Doing math in hex is much too weird. It's more likely to work, this way!
* Provided from UTW. Thanks.
*
* @param integer $scale_color
* @param string $min_color
* @param string $max_color
*
* @return string
*/
public static function get_color_by_scale( $scale_color, $min_color, $max_color ) {
$scale_color = $scale_color / 100;
$minr = hexdec( substr( $min_color, 1, 2 ) );
$ming = hexdec( substr( $min_color, 3, 2 ) );
$minb = hexdec( substr( $min_color, 5, 2 ) );
$maxr = hexdec( substr( $max_color, 1, 2 ) );
$maxg = hexdec( substr( $max_color, 3, 2 ) );
$maxb = hexdec( substr( $max_color, 5, 2 ) );
$r = dechex( intval( ( ( $maxr - $minr ) * $scale_color ) + $minr ) );
$g = dechex( intval( ( ( $maxg - $ming ) * $scale_color ) + $ming ) );
$b = dechex( intval( ( ( $maxb - $minb ) * $scale_color ) + $minb ) );
if ( strlen( $r ) == 1 ) {
$r = '0' . $r;
}
if ( strlen( $g ) == 1 ) {
$g = '0' . $g;
}
if ( strlen( $b ) == 1 ) {
$b = '0' . $b;
}
return '#' . $r . $g . $b;
}
/**
* Extend the round PHP public static function for force a dot for all locales instead the comma.
*
* @param string $value
* @param string $approximation
*
* @return float
* @author WebFactory Ltd
*/
public static function round( $value, $approximation ) {
$value = round( $value, $approximation );
$value = str_replace( ',', '.', $value ); // Fixes locale comma
$value = str_replace( ' ', '', $value ); // No space
return $value;
}
/**
* Format nice URL depending service
*
* @param string $type
* @param string $term_name
*
* @return string
*/
public static function format_external_tag( $type = '', $term_name = '' ) {
if ( empty( $term_name ) ) {
return '';
}
$term_name = esc_html( $term_name );
switch ( $type ) {
case 'technorati':
return '' . $term_name . ' ';
break;
case 'flickr':
return '' . $term_name . ' ';
break;
case 'delicious':
return '' . $term_name . ' ';
break;
default:
return '';
break;
}
}
}
etc — CRYPT.ru
Перейти к содержимому
25 ноября спотовые биткоин-ETF в США зарегистрировали чистый отток в размере 438,37 млн. долларов — это рекордный показатель с момента
Read More
Сегодня биткоин зафиксировал очередной исторический максимум, преодолев отметку в $98,000. Ethereum пока не может похвастаться такими достижениями, поэтому его показатели
Read More
В то время как цена биткоина (BTC) резко обновляет исторический максимум за максимумом, столь же резко цена эфириума (ETH), ведущего
Read More
Dogecoin имеет потенциал достичь более высоких уровней, но с оборотным предложением в 146 миллиардов токенов сторонники размышляют о том, где
Read More
Объем торгов токеном подскочил до $128,05 млн, что на бумаге звучит отлично. Такой всплеск обычно указывает на возобновление интереса, особенно
Read More
Индекс сезона альткоинов (ASI) упал до 35. Это указывает на то, что рыночные показатели биткоина улучшаются по сравнению с остальными
Read More
Dogecoin может приблизиться к установлению нового исторического максимума (ATH), если его рыночная капитализация вырастет до $100 млрд на фоне продолжающегося
Read More
Поскольку биткоин набирает обороты, Майкл Сэйлор , исполнительный председатель MicroStrategy, обратился к X (ранее Twitter) с простым, но мощным сообщением:
Read More
Cardano (ADA) стал одним из выдающихся альткоинов в недавнем ралли криптовалютного рынка, поднявшись более чем на 25% за последние три
Read More
На рынке криптовалют мало что может сравниться с добавлением на CoinMarketCap, самый популярный сайт для отслеживания рыночных данных. Не так
Read More
Цель сиба-ину достичь новых высот может материализоваться, если ее рыночная капитализация вырастет до отметки в 100 миллиардов долларов на фоне
Read More
23 октября 2024 года в Дубае состоялось главное событие для лидеров криптоотрасли со всего мира, количество участников невероятно большое –
Read More
Разговоры о возможном сотрудничестве между блокчейном первого уровня Injective (INJ) и протоколом искусственного интеллекта Fetch.AI (FET) привели к оптимистичному настрою
Read More
DTX Exchange (DTX) попал в фокус внимания крипторынка после листинга на CoinMarketCap. Шумиха, которая сопровождала это событие, взволновала криптосообщество. Текущая
Read More
Команда, стоящая за децентрализованной биржей (DEX) сиба-ину, ShibaSwap, подтверждает, что ShibaSwap 2.0 будет выпущен раньше, чем ожидалось. Это означает, что
Read More
После резкого летнего спада криптовалютный рынок всё ещё находится в фазе восстановления. По данным CoinMarketCap, глобальная рыночная капитализация на середину
Read More
Несмотря на скудные ценовые показатели XRP, активность на блокчейне XRP Ledger (XRPL) выросла до многомесячных максимумов, поскольку пользователи возобновили интерес
Read More
За прошедшую неделю совокупная рыночная капитализация стейблкоинов взлетела до $172 млрд, чего не отмечалось с мая 2022 года. Согласно данным
Read More
Согласно данным аналитической платформы CoinMarketCap, за последние сутки объём торгов фан-токенами взлетел более чем на 304,89% до $1,166 млрд. Рыночная
Read More
Среди мемных монет всё большей популярностью у инвесторов пользуется токен Pepe ($PEPE). Его рыночная капитализация достигла $4,7 млрд, а сам
Read More
Согласно данным аналитической платформы CoinMarketCap, цена криптовалюты Hamster Kombat (HMSTR) снизилась более чем на 39% за последние семь дней, потому
Read More