Jump to content

Warning: Invalid argument supplied for foreach()


hitstopz

Recommended Posts

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));
}

?>

Link to comment
Share on other sites

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));
}
}

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.