Plugin to auto convert custom fields to tag

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

Read More

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

?>

Related posts

Leave a Reply

1 comment

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