How to create custom meta description for each individual posts in wordpress
In respect to search engine optimization, we may need to add unique meta description for each post so that search engines can show the predefined custom excerpt in their search results . We can do it creating a custom meta box for the posts.
We will write functions for appearing a text box below the post editor section where we will put our individual meta description. We will use post excerpt (first 150 characters) if the field is left blank.
Add bellow code in your functions.php
// 'Custom Meta Description' field below post editor add_action('admin_menu', 'custom_meta_desc'); add_action('save_post', 'save_custom_meta_desc'); function custom_meta_desc() { add_meta_box('custom_meta_desc', 'Add SEO meta description for this post (if left empty, the first 150 characters of the excerpt will be used)', 'custom_meta_desc_input_function', 'post', 'normal', 'high'); } function custom_meta_desc_input_function() { global $post; echo '<input id="custom_meta_desc_input_hidden" type="hidden" name="custom_meta_desc_input_hidden" value="'.wp_create_nonce('custom-meta-desc-nonce').'" />'; echo '<input id="custom_meta_desc_input" style="width: 100%;" type="text" name="custom_meta_desc_input" value="'.get_post_meta($post->ID,'_custom_meta_desc',true).'" />'; } function save_custom_meta_desc($post_id) { if (!wp_verify_nonce($_POST['custom_meta_desc_input_hidden'], 'custom-meta-desc-nonce')) return $post_id; if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return $post_id; // Check permissions if ( 'page' == $_POST['post_type'] ) { if ( !current_user_can( 'edit_page', $post_id ) ) return $post_id; } else { if ( !current_user_can( 'edit_post', $post_id ) ) return $post_id; } $customMetaDesc = $_POST['custom_meta_desc_input']; update_post_meta($post_id, '_custom_meta_desc', $customMetaDesc); }
Now we need to add following code within meta description of header.php
<meta name="description" content="<?php if( is_single()) : $text = get_post_meta($post->ID,'_custom_meta_desc',true); if(!$text) $text = ($post->post_excerpt) ? $post->post_excerpt : substr($post->post_content, 0, 150).'...'; echo esc_attr(strip_tags(apply_filters('get_the_excerpt',$text))); else: if(is_home()){ echo "Your meta description for home page"; } endif; ?>">
Enjoy it.