Take the 2-minute tour ×
WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. It's 100% free, no registration required.

I have 3 custom fields that i would like to have automatically converted to tags anytime the post has them.

Custom field names: tag_name1, tag_name2, tag_name3

Is there a plugin or function that i can add to do this? I added it to my functions but i get this 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));
}

?>
share|improve this question
add comment

1 Answer

Placing something like this in your functions.php should work. I haven't had the opportunity to test this code yet and its a little messy (could be polished up) but should give you an very good starting point..

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, 'key_1', true);
 $tag2 = get_post_meta($post_id, 'key_2', true);
 $tag3 = get_post_meta($post_id, 'key_3', true);

 $tags_to_add = array($tag1, $tag2, $tag3);

 //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));
}
share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

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