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