Return all values stored in var outside foreach loop
Solution 1
First of all initialize the variable you want to use later on:
$checkmissing = array();
Then inside the foreach
append the first entry of the post terms to that array:
foreach($gallids as $gallterm)
{
list($checkmissing[]) = wp_get_post_terms($gallterm, 'type', array("fields" => "slugs"));
}
See $checkmissing[]
, that is what effectively will prevent that you overwrite it. It will append each to the array.
Finally you can output the result after the loop:
print_r($checkmissing);
Note: You should do some additional handling if wp_get_post_terms
returns an empty array:
foreach($gallids as $gallterm)
{
$terms = wp_get_post_terms($gallterm, 'type', array("fields" => "slugs"))
AND list($checkmissing[]) = $terms
;
}
Solution 2
I tried a few of the examples above and they didn't quite work the way I wanted. So I poked around and did a little research, here's how I got it working for me.
In my particular case I needed to grab all the category ID's for a specific post, then return that variable into the WP_Query arguments array.
First, you will need to grab the post terms
$terms = get_the_terms( $post->ID, 'category' );
Next you'll want to initialize the variable you want to use later on:
$cat_terms = array();
Next you'll declare the foreach to get each individual term ID
foreach ( $terms as $term ) {
$cat_terms[] = $term->term_id;
}
Now let's say you want to use return a comma separated list for this $cat_terms variable. We're going to use the 'join' function
$comma_separated_terms = join( ", ", $cat_terms );
Now let's say you want to use this variable to put into you WP_Query loop for say the 'category__in' parameter. We're going to use 'array_values'.
$values = array_values($cat_terms);
The nice thing about this is now we can insert this $values variable into the WP_Query arguments:
<?php global $post;
$query = new WP_Query(array(
'post_type' => 'post_type_name',
'category__in' => $values));
?>
In my particular case, the client wanted some custom post types to display in the sidebar based on the blog posts categories. So I needed to get all the blog post terms and match them up with the terms for the custom post types categories.
Final Code Looked something like this:
<?php
$terms = get_the_terms( $post->ID, 'category' );
$cat_terms = array();
foreach ( $terms as $term ) {
$cat_terms[] = $term->term_id;
}
$values = array_values($cat_terms);
?>
<h3><?php echo $title; ?></h3>
<?php global $post;
$query = new WP_Query(array(
'post_type' => 'custom_post_type',
'category__in' => $values));
if ( $query->have_posts() ) : ?>
<?php while ( $query->have_posts() ) : $query->the_post(); ?>
// Code for loop goes here
<?php endwhile; endif; ?>
<?php wp_reset_postdata(); ?>
user1134561
Updated on June 05, 2022Comments
-
user1134561 almost 2 years
So I assume something is being overwritten but I am unsure as to how to stop this and retrieve all values outside loop. Any ideas?
foreach($gallids as $gallterm) { $postterms = wp_get_post_terms($gallterm, 'type', array("fields" => "slugs")); $checkmissing = $postterms[0]; print_r($checkmissing); // Check Terms for missing images - works here. } print_r($checkmissing); // Check Terms for missing images - not working here // - seems to be getting last or first val only.
-
Mark Baker over 12 yearsEither make $checkmissing an array, or use $checkmissing .= $postterms[0]; to concatenate each postterms value to the string... or $checkmissing .= ', ' . $postterms[0]; if you want a comma separated string
-