Como lo sabrás la etiqueta <title> es muy importante por diversas razones, ya sea SEO o para informar en sección del sitio nos encontramos. Generalmente (aunque no siempre sucede) tu Theme ya cuenta la etiqueta <title> optimizada donde cambia automáticamente según en la pagina/post que nos encontremos. O tal vez cuentes con algún plugin que te permita cambiar el titulo desde su respectivo panel.

El problema surge cuando no contamos ni con un Theme Optimizado ni con un plugin que nos permita controlar el titulo.

Por suerte desde Digging into WordPress nos acercan una solución elegante: Mediante de una serie de filtros crearemos un nuevo panel donde podremos tomar control del titulo.

Lo primero que necesitamos hacer deshacernos de la etiqueta <title> dentro de header.php por completo, ya que vamos a insertarla luego por medios de filtros.

removetitle Toma control del titulo de cada post

Nuestra nueva función

En tu archivo functions.php vamos a insertar lo siguiente:

// Custom Page Titles
add_action('admin_menu', 'custom_title');
add_action('save_post', 'save_custom_title');
add_action('wp_head','insert_custom_title');
function custom_title() {
	add_meta_box('custom_title', 'Change page title', 'custom_title_input_function', 'post', 'normal', 'high');
	add_meta_box('custom_title', 'Change page title', 'custom_title_input_function', 'page', 'normal', 'high');
}
function custom_title_input_function() {
	global $post;
	echo '<input type="hidden" name="custom_title_input_hidden" id="custom_title_input_hidden" value="'.wp_create_nonce('custom-title-nonce').'" />';
	echo '<input type="text" name="custom_title_input" id="custom_title_input" style="width:100%;" value="'.get_post_meta($post->ID,'_custom_title',true).'" />';
}
function save_custom_title($post_id) {
	if (!wp_verify_nonce($_POST['custom_title_input_hidden'], 'custom-title-nonce')) return $post_id;
	if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return $post_id;
	$customTitle = $_POST['custom_title_input'];
	update_post_meta($post_id, '_custom_title', $customTitle);
}
function insert_custom_title() {
if (have_posts()) : the_post();
$customTitle = get_post_meta(get_the_ID(), '_custom_title', true);
if ($customTitle) {
echo "<title>$customTitle</title>";
      } else {
    	echo "<title>";
	      if (is_tag()) {
	         single_tag_title("Tag Archive for &quot;"); echo '&quot; - '; }
	      elseif (is_archive()) {
	         wp_title(''); echo ' Archive - '; }
	      elseif (!(is_404()) && (is_single()) || (is_page()) && (!(is_front_page())) ) {
	         wp_title(''); echo ' - '; }
	      elseif (is_404()) {
	         echo 'Not Found - '; }
	      if (is_home()) {
	         bloginfo('name'); echo ' - '; bloginfo('description'); }
	      else {
	          bloginfo('name'); }
	      if ($paged>1) {
	         echo ' - page '. $paged; }
        echo "</title>";
    }
endif;
rewind_posts();
}

Con esto lo que estamos haciendo, es insertar un nuevo box que aparecerá cuando escribamos o editemos una entrada. Luego la información generada se guarde cada vez que se se salve la entrada y por ultimo nuestro nuevo titulo se inserte en el header por medio de filtros.

Nuestro nuevo <title> es guardado como un custom field, pero como el Key “_custom_title” comienza con un guion bajo, este no se refleja en nuestra lista de custom fields, por lo que no molestara.

custompagetitle Toma control del titulo de cada post

Cada vez que entres a editar o crear una entrada vas a encontrar un nuevo box donde podrás tomar control por completo de la etiqueta <title>