0

very new here to php and wordpress coding (1 day lol). This is my code so far, the problem is that when there is no value assigned to this attribute I receive and error message. I know I need something that says if the value exists then display the rest of the code but not sure how to go about adding that. This is for a woocommerce product attribute btw.

Code so far:

$collection_values = get_the_terms( $product->id, 'pa_collection');

    foreach ($collection_values as $collection_value){
        echo '<h2 class="collection_title"><a href="'.get_term_link($collection_value->slug, $collection_value->taxonomy).'">'.$collection_value->name.'</a></h2>';
    }

Error message:

Warning: Invalid argument supplied for foreach() in /app/public/wp-content/themes/savoy/woocommerce/single-product/title.php on line 21

EDIT: I am adding this above the product title in the title.php page.

  • See the example in the documentation. – Milo Dec 8 '18 at 18:19
  • Hey Milo, thanks for the tip. This worked in terms of showing the attribute value only when it exists but now my title is no longer showing (I'm adding this code above the product title). The code that calls the attribute archive link also no longer works. – panther888 Dec 8 '18 at 18:45
0

If we refer to the documentation, we see that get_the_terms returns an array, false, or a WP_Error object. So in our code we'll add a check if $collection_values exists (it's not false), and it's not an error, then we'll know it has to be an array, and it's safe to run a foreach loop on it.

$collection_values = get_the_terms( $product->id, 'pa_collection');

if ( $collection_values && ! is_wp_error( $collection_values ) ){
    foreach ($collection_values as $collection_value){
        echo '<h2 class="collection_title"><a href="'.get_term_link($collection_value->slug, $collection_value->taxonomy).'">'.$collection_value->name.'</a></h2>';
    }
}
| improve this answer | |
0

This code worked for me:

      $collection_values = get_the_terms( $product->id, 'pa_collection');
    if( !empty($collection_values) ) :
    foreach ($collection_values as $collection_value){
        echo '<h2 class="collection_title"><a href="'.get_term_link($collection_value->slug, $collection_value->taxonomy).'">'.$collection_value->name.'</a></h2>';
    }

endif;
| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.