hitstopz Posted April 25, 2012 Share Posted April 25, 2012 I keep getting the following error. Warning: Invalid argument supplied for foreach() in /home/content/46/8529846/html/wp-content/themes/super-light/functions.php on line 94 Warning: Cannot modify header information - headers already sent by (output started at /home/content/46/8529846/html/wp-content/themes/super-light/functions.php:94) in /home/content/46/8529846/html/wp-includes/pluggable.php on line 866 <?php if ( ! isset( $content_width ) ) $content_width = 650; add_action( 'widgets_init', 'super_light_sidebars' ); function super_light_sidebars() { register_sidebar(array( 'name' => __( 'Sidebar Widget Area', 'super_light'), 'id' => 'sidebar-widget-area', 'description' => __( 'The sidebar widget area', 'super_light'), 'before_widget' => '<div class="widget">', 'after_widget' => '</div>', 'before_title' => '<h3>', 'after_title' => '</h3>', )); } register_nav_menus( array( 'primary' => __('Header Menu', 'super_light'), 'secondary' => __('Footer Menu', 'super_light') ) ); //Multi-level pages menu function super_light_page_menu() { if (is_page()) { $highlight = "page_item"; } else {$highlight = "menu-item current-menu-item"; } echo '<ul class="menu">'; wp_list_pages('sort_column=menu_order&title_li=&link_before=&link_after=&depth=3'); echo '</ul>'; } //Single-level pages menu function super_light_menu_flat() { if (is_page()) { $highlight = "page_item"; } else {$highlight = "menu-item current-menu-item"; } echo '<ul class="menu">'; wp_list_pages('sort_column=menu_order&title_li=&link_before=&link_after=&depth=1'); echo '</ul>'; } add_editor_style(); add_theme_support('automatic-feed-links'); add_theme_support('post-thumbnails'); set_post_thumbnail_size( 120, 120, true ); // Default size // Make theme available for translation // Translations can be filed in the /languages/ directory load_theme_textdomain('super_light', get_template_directory() . '/languages'); function catch_that_image() { global $post, $posts; $first_img = ''; ob_start(); ob_end_clean(); $output = preg_match_all('/<img.+src=[\'"]([^\'"]+)[\'"].*>/i', $post->post_content, $matches); $first_img = $matches [1] [0]; if(empty($first_img)){ //Defines a default image $first_img = "/images/default.jpg"; } return $first_img; } add_action('save_post','custom_field_add_tags'); function custom_field_add_tags($post_id) { $post = get_post($post_id); //get values of custom fields and put into array $tag1 = get_post_meta($post_id, 'tag_name1', true); $tag2 = get_post_meta($post_id, 'tag_name2', true); $tag3 = get_post_meta($post_id, 'tag_name3', true); $tag4 = get_post_meta($post_id, 'tag_name4', true); $tag5 = get_post_meta($post_id, 'tag_name5', true); $tag6 = get_post_meta($post_id, 'tag_name6', true); $tag7 = get_post_meta($post_id, 'tag_name7', true); $tag8 = get_post_meta($post_id, 'tag_name8', true); $tag9 = get_post_meta($post_id, 'tag_name9', true); $tags_to_add = array($tag1, $tag2, $tag3, $tag4, $tag5, $tag6, $tag7, $tag8, $tag9); //now check if tag does not already exist (if no - add tag from custom field) $add_tags = array(); foreach(get_the_terms($post_id, 'post_tag') as $term) if(!in_array($term->slug, $tags_to_add)) $add_tags[] = $term->slug; if(!empty($add_tags)) wp_add_post_tags($post_id, implode(',', $add_tags)); } ?> Quote Link to comment https://forums.phpfreaks.com/topic/261607-warning-invalid-argument-supplied-for-foreach/ Share on other sites More sharing options...
scootstah Posted April 26, 2012 Share Posted April 26, 2012 get_the_terms() only returns an array if the term is the "taxonomy" is found. Since there is no guarantee an array will be returned, you need to first check if one is before you start your foreach. Something like this ought to work: if ($terms = get_the_terms($post_id, 'post_tag')) { $add_tags = array(); foreach($terms as $term) { if (!in_array($term->slug, $tags_to_add)) { $add_tags[] = $term->slug; } } if (!empty($add_tags)) { wp_add_post_tags($post_id, implode(',', $add_tags)); } } Quote Link to comment https://forums.phpfreaks.com/topic/261607-warning-invalid-argument-supplied-for-foreach/#findComment-1340550 Share on other sites More sharing options...
hitstopz Posted April 26, 2012 Author Share Posted April 26, 2012 When I updated the code i get this error Parse error: syntax error, unexpected $end in /home/content/46/8529846/html/wp-content/themes/super-light/functions.php on line 109 Quote Link to comment https://forums.phpfreaks.com/topic/261607-warning-invalid-argument-supplied-for-foreach/#findComment-1340559 Share on other sites More sharing options...
scootstah Posted April 26, 2012 Share Posted April 26, 2012 You probably have an un-closed set of brackets somewhere. Quote Link to comment https://forums.phpfreaks.com/topic/261607-warning-invalid-argument-supplied-for-foreach/#findComment-1340561 Share on other sites More sharing options...
hitstopz Posted April 26, 2012 Author Share Posted April 26, 2012 I updated the brackets but the function did not work. Do i need to update the $add_tags = array(); and change it to array($tag1, $tag2, $tag3, $tag4, $tag5, $tag6, $tag7, $tag8, $tag9); Quote Link to comment https://forums.phpfreaks.com/topic/261607-warning-invalid-argument-supplied-for-foreach/#findComment-1340562 Share on other sites More sharing options...
scootstah Posted April 26, 2012 Share Posted April 26, 2012 Do i need to update the $add_tags = array(); and change it to array($tag1, $tag2, $tag3, $tag4, $tag5, $tag6, $tag7, $tag8, $tag9); No. That only serves to initialize the variable. If you don't do that and your foreach loop doesn't add anything to the array, the if statement below the foreach would throw an error because $add_tags would be undefined. Post all of functions.php. Quote Link to comment https://forums.phpfreaks.com/topic/261607-warning-invalid-argument-supplied-for-foreach/#findComment-1340633 Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.