SEO settings for wordpress (no yoast required)

First install the ACF plugin and create the appropriate fields. Then insert the code below to functions.php.

				
					/* ==========================================================================
   DCODEHUB: NATIVE SEO META BOXES (No Yoast Required)
   ========================================================================== */

// 1. Create the input boxes in the WordPress Editor
add_action('add_meta_boxes', 'dcodehub_add_seo_meta_box');
function dcodehub_add_seo_meta_box() {
    $screens = ['post', 'page']; // Shows up on pages and blog posts
    foreach ($screens as $screen) {
        add_meta_box('dcodehub_seo_box', 'DCodeHub SEO Settings', 'dcodehub_seo_box_html', $screen, 'normal', 'high');
    }
}

// 2. The HTML for the input boxes
function dcodehub_seo_box_html($post) {
    $title = get_post_meta($post->ID, '_dcodehub_seo_title', true);
    $desc = get_post_meta($post->ID, '_dcodehub_seo_description', true);
    wp_nonce_field('dcodehub_seo_save', 'dcodehub_seo_nonce');
    ?>
    <p>
        <label for="dcodehub_seo_title" style="font-weight:600; display:block; margin-bottom:5px;">Meta Title (leave blank to use default page title)</label>
        <input type="text" name="dcodehub_seo_title" id="dcodehub_seo_title" value="<?php echo esc_attr($title); ?>" style="width:100%; max-width:600px; padding:6px;" />
    </p>
    <p>
        <label for="dcodehub_seo_description" style="font-weight:600; display:block; margin-bottom:5px;">Meta Description (optimal length: 150-160 characters)</label>
        <textarea name="dcodehub_seo_description" id="dcodehub_seo_description" rows="3" style="width:100%; max-width:600px; padding:6px;"><?php echo esc_textarea($desc); ?></textarea>
    </p>
    <?php
}

// 3. Save the data when you hit "Update" on a page
add_action('save_post', 'dcodehub_save_seo_meta');
function dcodehub_save_seo_meta($post_id) {
    if (!isset($_POST['dcodehub_seo_nonce']) || !wp_verify_nonce($_POST['dcodehub_seo_nonce'], 'dcodehub_seo_save')) return;
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return;
    if (!current_user_can('edit_post', $post_id)) return;

    if (isset($_POST['dcodehub_seo_title'])) {
        update_post_meta($post_id, '_dcodehub_seo_title', sanitize_text_field($_POST['dcodehub_seo_title']));
    }
    if (isset($_POST['dcodehub_seo_description'])) {
        update_post_meta($post_id, '_dcodehub_seo_description', sanitize_textarea_field($_POST['dcodehub_seo_description']));
    }
}

// 4. Inject the Title and Description into the live `<head>`
add_filter('pre_get_document_title', 'dcodehub_output_seo_title', 999);
function dcodehub_output_seo_title($title) {
    if (is_singular()) {
        $custom_title = get_post_meta(get_queried_object_id(), '_dcodehub_seo_title', true);
        if (!empty($custom_title)) return $custom_title;
    }
    return $title;
}

add_action('wp_head', 'dcodehub_output_seo_description', 1);
function dcodehub_output_seo_description() {
    if (is_singular()) {
        $custom_desc = get_post_meta(get_queried_object_id(), '_dcodehub_seo_description', true);
        if (!empty($custom_desc)) {
            echo '<meta name="description" content="' . esc_attr($custom_desc) . '">' . "\n";
        }
    }
}
				
			

More Articles