Show Custom Site Title or Tagline per Page

to have a custom site title and/or tagline on different pages (static pages only) of your WordPress site;
one possible approach:

/*
* customize different Site Title 
* and Tagline per (static) page
*/

// create meta boxe for 'Custom Site Title' field below page editor

add_action( 'admin_menu', 'custom_site_title' );
add_action( 'save_post', 'save_custom_site_title' );

function custom_site_title() {
	add_meta_box( 'custom_site_title', 'Custom Site Title for this page <small>(if left empty, the general Site Title will be used)</small>', 'custom_site_title_input_function', 'page', 'normal', 'high' );
}

function custom_site_title_input_function() {
	global $post;
	echo '<input type="hidden" name="custom_site_title_input_hidden" id="custom_site_title_input_hidden" value="'.wp_create_nonce( 'custom_site_title-nonce' ).'" />';
	echo '<input type="text" name="custom_site_title_input" id="custom_site_title_input" style="width:100%;" value="'.get_post_meta( $post->ID, '_custom_site_title', true ).'" />';
}

function save_custom_site_title( $post_id ) {
	if (isset( $_POST['custom_site_title_input_hidden'] )) if (!wp_verify_nonce($_POST['custom_site_title_input_hidden'], 'custom_site_title-nonce')) return $post_id;
	if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return $post_id;
	if (isset( $_POST['custom_site_title'] )) {
		$customSiteTitle = $_POST['custom_site_title_input'];
		update_post_meta( $post_id, '_custom_site_title', $customSiteTitle );
	}
}

// create meta boxe for 'Custom Tagline' field below page editor

add_action( 'admin_menu', 'custom_site_tagline' );
add_action( 'save_post', 'save_custom_site_tagline' );

function custom_site_tagline() {
	add_meta_box( 'custom_site_tagline', 'Custom Tagline for this page <small>(if left empty, the general Tagline will be used)</small>', 'custom_site_tagline_input_function', 'page', 'normal', 'high' );
}

function custom_site_tagline_input_function() {
	global $post;
	echo '<input type="hidden" name="custom_site_tagline_input_hidden" id="custom_site_tagline_input_hidden" value="'.wp_create_nonce( 'custom_site_tagline-nonce' ).'" />';
	echo '<input type="text" name="custom_site_tagline_input" id="custom_site_tagline_input" style="width:100%;" value="'.get_post_meta( $post->ID, '_custom_site_tagline', true ).'" />';
}

function save_custom_site_tagline( $post_id ) {
	if (isset( $_POST['custom_site_tagline_input_hidden'] )) if (!wp_verify_nonce($_POST['custom_site_tagline_input_hidden'], 'custom_site_tagline-nonce')) return $post_id;
	if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return $post_id;
	if (isset( $_POST['custom_site_tagline'] )) {
		$customSiteTagline = $_POST['custom_site_tagline_input'];
		update_post_meta( $post_id, '_custom_site_tagline', $customSiteTagline );
	}
}

//preparing the output

add_filter( 'bloginfo', 'custom_site_title_tagline_output', 2, 10 );

function custom_site_title_tagline_output( $site_bloginfo, $show ) {
	global $post;
	if( $show == 'name' && is_page() && get_post_meta( $post->ID, '_custom_site_title', true ) ) {
		$site_bloginfo = get_post_meta( $post->ID, '_custom_site_title', true );
	}
	if( $show == 'description' && is_page() && get_post_meta( $post->ID, '_custom_site_tagline', true ) ) {
		$site_bloginfo = get_post_meta( $post->ID, '_custom_site_tagline', true );
	}
	return $site_bloginfo;
}

add the code to functions.php of your theme; could also be made into a plugin as it is not theme dependant.
might also change meta title and/or tagline; not tested for interference with seo plugins.
code in pastebin https://pastebin.com/n9Xd5uZg

Leave a Reply

Your email address will not be published. Required fields are marked *