<?php
|
|
if (!defined('ABSPATH')) {
|
exit;
|
}
|
|
/**
|
* @param string $term
|
* @param int|false $ID
|
* @param string $classes
|
*
|
* @return string
|
*/
|
function jvbGetTheTerms(string $term, int|false $ID = false, string $classes = ''):string
|
{
|
$taxonomy = jvbCheckBase($term);
|
if (!taxonomy_exists($taxonomy)) {
|
return '';
|
}
|
if (!str_starts_with($classes, ' ')) {
|
$classes = ' '.$classes;
|
}
|
|
if (!$ID) {
|
$ID = get_the_ID();
|
}
|
|
$classes .= $term;
|
|
$terms = get_the_terms($ID, $taxonomy);
|
$out = '';
|
if ($terms && !is_wp_error($terms)) {
|
$out = '<ul class="'.trim('term-list '.$classes).'">';
|
foreach ($terms as $t) {
|
$url = get_term_link($t->term_id, BASE.$term);
|
$out .= '<li><a href="'.$url.'" title="View more in '.$t->name.'" rel="tag">'.$t->name.'</a></li>';
|
}
|
$out .= '</ul>';
|
}
|
|
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
|
{
|
// SAFETY: Skip attachments and other non-content post types
|
if (in_array($post->post_type, jvbIgnoredPostTypes())) {
|
return;
|
}
|
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);
|
}
|