';
foreach ($terms as $t) {
$url = get_term_link($t->term_id, BASE.$term);
$out .= '
'.$t->name.'';
}
$out .= '';
}
return $out;
}
/**
* Clear taxonomy list caches when terms are saved
* @param int $term_id
* @param int $tt_id
* @param string $taxonomy
*
* @return void
*/
add_action('edited_term', 'jvbClearTermListCache', 10, 3);
add_action('created_term', 'jvbClearTermListCache', 10, 3);
add_action('delete_term', 'jvbClearTermListCache', 10, 3);
function jvbClearTermListCache(int $term_id, int $tt_id, string $taxonomy):void
{
// Check if this taxonomy has a corresponding list
$types = jvbGlobalDirectoryInfo();
foreach ($types as $type) {
if ($type['slug'] === $taxonomy) {
// Delete the option to force regeneration
delete_option(BASE . $type['slug'] . '_list');
break;
}
}
// If this is a city and it's linked to other taxonomies, clear those too
if ($taxonomy === BASE.'city') {
foreach ($types as $type) {
if (!empty($type['links']) && in_array(BASE.'_city', $type['links'])) {
delete_option(BASE . $type['slug'] . '_list');
}
}
}
}
/**
* Clear list caches when post types are saved
*/
add_action('save_post', 'jvbClearListCache', 10, 2);
function jvbClearListCache(int $post_id, \WP_Post $post):void
{
if (jvbNoSaveIt($post_id, $post)) {
return;
}
// Get post type
$post_type = get_post_type($post_id);
// Check if this post type has a corresponding list
$types = jvbGlobalDirectoryInfo();
foreach ($types as $type) {
if ($type['slug'] === $post_type) {
// Delete the option to force regeneration
delete_option(BASE . $type['slug'] . '_list');
break;
}
}
}
/**
* @param int $artistID
* @param string $taxonomy
*
* @return array
*/
function jvbGetArtistTerm(int $artistID, string $taxonomy):array
{
$taxonomy = (str_starts_with($taxonomy, BASE)) ? $taxonomy : BASE.$taxonomy;
$terms = get_the_terms($artistID, $taxonomy);
if ($terms && !is_wp_error($terms)) {
$ID = $terms[0]->term_id;
$name = $terms[0]->name;
return [
'id' => $ID,
'name' => $name,
'url' => get_term_link($ID, $taxonomy)
];
}
return [];
}
/**
* Gets the artist type taxonomy name
* @param int $ID
*
* @return string
*/
function jvbArtistType(int $ID):string
{
$types = get_the_terms($ID, BASE.'type');
$type = '';
if ($types && !is_wp_error($types)) {
$type = $types[0]->term_id;
$type = get_term_meta($type, BASE.'singular', true);
}
return ($type == '') ? 'Tattoo Artist' : $type;
}
/**
* Gets the first name of city listed
* @param int $ID
*
* @return string
*/
function jvbArtistCity(int $ID):string
{
$cities = get_the_terms($ID, 'jvb_city');
if ($cities && !is_wp_error($cities)) {
return $cities[0]->name;
}
return 'Edmonton';
}
function jvbGetContentUsers(int $termID, $user = BASE.'artist'):array
{
$users = get_term_meta($termID, BASE.'users', true);
if ($users === '') {
$term = get_term($termID);
$taxonomy = $term->taxonomy;
if (taxIsJVBContentTax($taxonomy)) {
$posts = new WP_Query([
'post_type' => jvbCheckBase($user),
'posts_per_page' => -1,
'tax_query' => [
[
'taxonomy' => $taxonomy,
'terms' => $term
]
]
]);
if (!empty($posts->posts)) {
$users = array_map(
function ($post) {
return $post->post_author;
},
$posts->posts
);
}
$users = implode(',', $users);
update_post_meta($termID, BASE.'users', $users);
}
}
return explode(',', $users);
}