Tell us what you are trying to do?
I have custom types and categories for them. How can I get the "values" of those categories? I use them in a function, where I get a short code then.
Is there any documentation that you are following?
Not found anything useful
Is there a similar example that we can see?
This is the function I am using:
function display_tourdetails() {
global $post;
$str = '';
$tour_duration_category = get_post_meta($post->ID,'wpcf-tour-duration-category',true);
$tour_duration = get_term_meta($post->ID,'wpv-tour-duration',true);
$tour_specialty = get_term_meta($post->ID,'wpv-tour-specialty',true);
$total_tour_distance_km = get_post_meta($post->ID,'wpcf-total-tour-distance-km',true);
$total_tour_distance_mi = get_post_meta($post->ID,'wpcf-total-tour-distance-mi',true);
$average_distance_per_day = get_post_meta($post->ID,'wpcf-average-distance-per-day',true);
$average_climbing_per_day = get_post_meta($post->ID,'wpcf-average-climbing-per-day',true);
$price = get_post_meta($post->ID,'wpcf-price',true);
$str .= '<div class="facts">';
if(!empty($tour_duration_category)){
$str .= '<div class="style touring">Tour Cat:<br /> '.$tour_duration_category.'</div>';
}
if(!empty($tour_duration)){
$str .= '<div class="duration">Duration:<br /> '.$tour_duration.'</div>';
}
if(!empty($tour_specialty)){
$str .= '<div class="destination">Difficulty:<br /> '.$tour_specialty.'</div>';
}
if(!empty($tour_duration_category)){
$str .= '<div class="price">Specialty:<br /> '.$tour_duration_category.'</div>';
}
if(!empty($total_tour_distance_km)){
$str .= '<div class="style touring">Total Riding Distance:<br /> '.$total_tour_distance_km.' km / '.$total_tour_distance_mi.' miles</div>';
}
if(!empty($average_distance_per_day)){
$str .= '<div class="duration">Ride Distance p/day:<br /> '.$average_distance_per_day.'</div>';
}
if(!empty($average_climbing_per_day)){
$str .= '<div class="destination">Av. climbing p/day:<br /> '.$average_climbing_per_day.'</div>';
}
if(!empty($price)){
$str .= '<div class="price">Price:<br /> '.$price.'</div>';
}
$str .= '</div>';
return $str;
}
add_shortcode( 'show_tourfacts', 'display_tourdetails' );
What is the link to your site?
hidden link
Hello and thank you for contacting the Toolset support.
Categories are taxonomies in WordPress vocabulary. https://toolset.com/glossary/taxonomy/
To get a taxonomy term of a post from the database we can use the function wp_get_post_terms. Read more about it here https://developer.wordpress.org/reference/functions/wp_get_post_terms/
In Toolset, taxonomies are not prefixed by 'wpcf-'. We can get the term ids for a taxonomy Category(slug: category) with the following:
wp_get_post_terms( $post->ID, 'category', array( 'fields' => 'ids' ) );
Dear Jamal
Okay, I understand so far.
Do You have an example how to do it? Meaning in the whole "context":
We have 3 different taxanomies (tour-duration, tour-specialty & tour-difficulty) as categories. As You can see above in my php code
I have at the moment this (I understand that this is wrong respectively not working):
$tour_duration = get_term_meta($post->ID,'wpcf-tour-duration',true);
$tour_specialty = get_term_meta($post->ID,'wpcf-tour-specialty',true);
$tour_difficulty = get_term_meta($post->ID,'wpcf-tour-difficulty',true);
and later this for the category "duration"
if(!empty($tour_duration)){
$str .= '<div class="duration"><strong>Duration:</strong><br /> '.$tour_duration.'</div>';
How I get now only one - so far we are having only one category per post type each! - with this?
$tour_duration = wp_get_post_terms( $post->ID, 'tour-duration', array( 'fields' => 'names' ) );
Hello,
Please note that "get_term_meta" takes a $term_id instead of a $post_id. Also it returns an array instead of a string.
https://developer.wordpress.org/reference/functions/get_term_meta/
If you want to use get_term_meta, you will need to get the term_ids then get the term meta from the term ids:
$term_ids = wp_get_post_terms( $post->ID, 'category', array( 'fields' => 'ids' ) );
$term_durations = array();
foreach($term_ids as $term_id) {
$term_duration = get_term_meta($term_id,'wpcf-tour-duration',true);
$term_durations[] = $term_duration
}
You may also use directly "wp_get_post_terms" specifying the term meta as follow:
wp_get_post_terms( $post->ID, 'category', array( 'fields' => 'wpcf-tour-duration' ) );
Please note that I did not test any of the following codes. Let me know what you will get and if you still encounter issues, I might create a local test and check how to get it.
I have this for the moment, what gives me the solution I need:
function display_tourdetails() {
global $post;
$str = '';
$tour_duration_category = get_post_meta($post->ID,'wpcf-tour-duration-category',true);
//$tour_duration = get_term_meta($post->ID,'wpcf-tour-duration',true);
$atour_duration = wp_get_post_terms( $post->ID, 'tour-duration', array( 'fields' => 'names' ) );
$tour_duration = $atour_duration[0];
//$tour_specialty = get_term_meta($post->ID,'wpcf-tour-specialty',true);
$atour_specialty = wp_get_post_terms( $post->ID, 'tour-specialty', array( 'fields' => 'names' ) );
$tour_specialty = $atour_specialty[0];
//$tour_difficulty = get_term_meta($post->ID,'wpcf-tour-difficulty',true);
$atour_difficulty = wp_get_post_terms( $post->ID, 'tour-difficulty', array( 'fields' => 'names' ) );
$tour_difficulty = $atour_difficulty[0];
$total_tour_distance_km = get_post_meta($post->ID,'wpcf-total-tour-distance-km',true);
$total_tour_distance_mi = get_post_meta($post->ID,'wpcf-total-tour-distance-mi',true);
$average_distance_per_day = get_post_meta($post->ID,'wpcf-average-distance-per-day',true);
$average_climbing_per_day = get_post_meta($post->ID,'wpcf-average-climbing-per-day',true);
$price = get_post_meta($post->ID,'wpcf-price',true);
$str .= '<div class="facts">';
if(!empty($tour_duration_category)){
$str .= '<div class="style touring"><strong>Tour Cat:</strong><br /> '.$tour_duration_category.'</div>';
}
if(!empty($tour_duration)){
$str .= '<div class="duration"><strong>Duration:</strong><br /> '.$tour_duration.'</div>';
}
if(!empty($tour_difficulty)){
$str .= '<div class="destination"><strong>Difficulty:</strong><br /> '.$tour_difficulty.'</div>';
}
if(!empty($tour_specialty)){
$str .= '<div class="price"><strong>Specialty:</strong><br /> '.$tour_specialty.'</div>';
}
if(!empty($total_tour_distance_km)){
$str .= '<div class="style touring"><strong>Total Riding Distance:</strong><br /> '.$total_tour_distance_km.' km / '.$total_tour_distance_mi.' miles</div>';
}
if(!empty($average_distance_per_day)){
$str .= '<div class="duration"><strong>Ride Distance p/day:</strong><br /> '.$average_distance_per_day.'</div>';
}
if(!empty($average_climbing_per_day)){
$str .= '<div class="destination"><strong>Av. climbing p/day:</strong><br /> '.$average_climbing_per_day.'</div>';
}
if(!empty($price)){
$str .= '<div class="price"><strong>Price:</strong><br /> '.$price.'</div>';
}
$str .= '</div>';
return $str;
}
add_shortcode( 'show_tourfacts', 'display_tourdetails' );