Résoudre le bug de la title avec Mantra 2.4

Voici venu le temps du billet du mois de mai, un billet pour vous indiquer comment résoudre le bug de la balise title dans la dernière version du thème WordPress Mantra (la 2.4) que j’utilise pour ce blog avec le plugin All In SEO pack. Pour la petite histoire, oui, j’utilise All In SEO pack et non pas WordPress SEO by Yoast pour tout un tas de raisons qui toutes – et même d’autres – sont très bien expliquées dans cet article du blog de Marie-Aude.

La mauvaise surprise SEO du samedi matin

Après avoir regardé avec intérêt les résultats de l’enquête réalisée par l’équipe du SEO Camp Genève publiés ici et à laquelle j’ai eu la chance de participer, je me dis, je vais tout de même m’enquérir de savoir de combien de temps date le dernier article sur le site à linker que j’avais choisi. Et là patatras… Mais quelque part heureusement. Y prêtant attention exceptionnellement, peut-être encore plongé dans la léthargie du lendemain d’un vendredi soir un peu arrosé, ou dans l’impact du premier café de la journée qui n’a pas encore commencé à donner sa pleine mesure, voici ce que je vois :

url-en-title

URL en balise title, aïe aïe aïe

Et oui, plus de balise title. A pu. Cassé :(. Et dire que je me réjouissais d’avoir noté les différents critères de l’étude sensiblement de la même façon que de prestigieux confrères, voilà que le critère le plus important de cette dernière est défaillant sur mon blog et sur un blog référencement, ça fait on ne peut plus tâche. Cela dit, je sais pour avoir « travaillé » sur ce dernier que cela n’était pas le cas il y a encore peu de temps. D’où viens donc le problème / bug ?

Mise à jour du thème Mantra

Du thème WordPress Mantra 2.3.4 vers 2.4

J’ai bien pensé l’espace d’un court instant à un mauvais paramétrage du plugin All In One SEO pack suite à une mise à jour ou autre, mais il n’en était rien. Heureusement, puisque je l’utilise sur l’ensemble de mes sites sous WordPress pour les raisons évoquées en amont. Et là je me souviens d’avoir effectué il y a peu une mise à jour du thème Mantra… Je vérifie mon autre site utilisant ce thème et là bim, idem. Je te tiens (tu me tiens…). Le problème vient donc du thème WordPress Mantra et de la mise à jour de la version 2.3.4 vers la version 2.4.

Retour vers le futur. Mais vous voulez dire le passé ? Exact !

Pour m’en assurer, je « downgrade » la version du thème Mantra que j’utilise et bingo, c’est reparti comme en 40. Reste donc à trouver le fichier qui pose problème. Mes soupçons se portent au final assez rapidement sur le fichier theme-seo.php qui se trouve dans le dossier includes du thème Mantra. Je le teste ainsi que quelques autres mais c’est bien lui qui pose problème. Déjà, le fichier theme-seo.php de la version 2.4 du thème Mantra retire la ligne suivante :

disparition-ligne-title

Problématique. D’autant plus que le fichier de l’ancienne version comporte d’autres fonctions qui disparaissent dans la nouvelle. Ne regardant pas à la dépense, je remets donc tous les fichiers du thème « upgradé » et le fichier theme-seo.php de la version 2.3.4 à la place de celui de la version 2.4 et là, me voici revenu à une situation bien plus conforme à ce que j’espère :

title-retrouvee

Les solutions pour régler le bug

Conclusion de tout cela, vous avez trois solutions pour résoudre ce bug du nouveau thème Mantra qui remplace la balise title par l’url de la page :

  • Changer de thème, mais ce n’est pas terrible car vous êtes peut-être attaché à l’aspect visuel de Mantra qui n’est pas désagréable et qui permet de faire quelques jolies choses.
  • Garder l’ancienne version du thème, mais on sait qu’en termes de sécurité, ce n’est pas optimisé, loin de là.
  • La dernière solution, celle pour laquelle j’ai opté à titre perso, utiliser la dernière version de Mantra en remplaçant le fichier theme-seo.php de celle-ci par celui de la version précédente.

Et si vous n’avez pas pensé à faire une sauvegarde d’une version antérieure de Mantra et que vous retrouvez dans la panade avec votre nouvelle version, voici le contenu du fichier theme-seo.php que vous devez mettre à la place du nouveau :

<?php /*
 * SEO related functions
 *
 * @package mantra
 * @subpackage Functions
 */
 
/**
 * Filter for page meta title.
 */
function mantra_filter_wp_title( $title ) {
    // Get the Site Name
    $site_name = get_bloginfo( 'name' );
    // Prepend name
    $filtered_title = (((strlen($site_name)>0)&&(strlen($title)>0))?$title.' - '.$site_name:$title.$site_name);
    // Get the Site Description
     $site_description = get_bloginfo( 'description' );
    // If site front page, append description
    if ( (is_home() || is_front_page()) && $site_description ) {
        // Append Site Description to title
        $filtered_title = ((strlen($site_name)>0)&&(strlen($site_description)>0))?$site_name. " | ".$site_description:$site_name.$site_description;
    }
    // Add pagination if that's the case
    global $page, $paged;
    if ( $paged >= 2 || $page >= 2 )
    $filtered_title .=     ' | ' . sprintf( __( 'Page %s', 'parabola' ), max( $paged, $page ) );

    // Return the modified title
    return $filtered_title;
}

function mantra_filter_wp_title_rss($title) {
return ' ';
}
add_filter( 'wp_title', 'mantra_filter_wp_title' );
add_filter('wp_title_rss','mantra_filter_wp_title_rss');

 /**
 * Meta description
 */
function mantra_seo_description() {
    global $mantra_options;
    foreach ($mantra_options as $key => $value) {
     ${"$key"} = $value ;}

        if ( (is_home() && $mantra_seo_home_desc) || (is_page_template('template-blog.php') && $mantra_seo_home_desc) ) {
            echo PHP_EOL.'<meta name="description" content="';
            echo $mantra_seo_home_desc;
            echo '" />'; }
        else if ((is_single() || is_page()) && !is_404()) {
                if ($mantra_seo_gen_desc =="Auto") {
                    global $post;
                    $content_post = get_post($post->ID);
                    $content =  strip_shortcodes($content_post->post_content);
                    $content = preg_replace(array('/\s{2,}/', '/[\t\n]/'), ' ', $content);
                    $content = strip_tags($content);
                    $content = str_replace('"','',$content);
                    $content = preg_replace('/((\w+\W+\'*){'.(33).'}(\w+))(.*)/', '${1}', $content);
            }
            else if ($mantra_seo_gen_desc=="Manual") {
            global $post,$mantra_meta_box_description;
            $content =  get_post_meta($post->ID,'SEOdescription_value',true);
            }

            echo PHP_EOL.'<meta name="description" content="';
            echo $content;
            echo '" />'; }
        else if (is_category() && category_description() != "") {
            echo PHP_EOL.'<meta name="description" content="';
            echo  trim(strip_tags(category_description()));
            echo '" />'; }
        
}

 /**
 * Meta author
 */
function mantra_seo_name() {
    global $mantra_options;
    foreach ($mantra_options as $key => $value) {
     ${"$key"} = $value ;}
echo '<meta name="author" content="'.$mantra_seo_author.'" />';
}
 /**
 * Meta Theme 
 */
function mantra_seo_template() {
echo PHP_EOL.'<meta property="template" content="mantra" />'.PHP_EOL;
}
/**
 * Meta Title 
 */
function mantra_seo_title() {
echo "<title>".wp_title( '', false, 'right' )."</title>".PHP_EOL;
echo '<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />';
}


// Mantra main seo function
function mantra_seo_generator() {
global $mantra_options;
foreach ($mantra_options as $key => $value) {
${"$key"} = $value ;}
add_action ('cryout_seo_hook','mantra_seo_title');
add_action ('cryout_seo_hook','mantra_seo_description');

if($mantra_seo_author && $mantra_seo_author!="Do not use") 
    add_action ('cryout_seo_hook','mantra_seo_name');
    
add_action ('cryout_seo_hook','mantra_seo_template');
}
if($mantra_seo=="Enable") mantra_seo_generator() ; 
    else add_action ('cryout_seo_hook','mantra_seo_title',0);

// Mantra favicon
function mantra_fav_icon() {
global $mantra_options;
foreach ($mantra_options as $key => $value) {
${"$key"} = $value ;}    
     echo '<link rel="shortcut icon" href="'.esc_url($mantra_options['mantra_favicon']).'" />'; 
     echo '<link rel="apple-touch-icon" href="'.esc_url($mantra_options['mantra_favicon']).'" />'; 
    }

if ($mantra_options['mantra_favicon']) add_action ('cryout_header_hook','mantra_fav_icon');    

    
/*
Plugin Name: Custom Write Panel
Plugin URI: http://wefunction.com/2008/10/tutorial-create-custom-write-panels-in-wordpress
Description: Allows custom fields to be added to the WordPress Post Page
Version: 1.0
Author: Spencer
Author URI: http://wefunction.com
/* ----------------------------------------------*/
 
$mantra_meta_box_description =
array(
"image" => array(
"name" => "SEOdescription",
"std" => "",
"title" => "Input the SEO description for this post/page here (about 160 characters): ",
"description" => "This description is for SEO purposes only. It will be used as a meta in your HTML header. It won't be vislbe anywhere else.<br> More SEO options in the Mantra Settings Page >> Misc Options >> SEO.")
);

function mantra_meta_box_description() {
global $post, $mantra_meta_box_description;
 
foreach($mantra_meta_box_description as $meta_box) {
$meta_box_value = get_post_meta($post->ID, $meta_box['name'].'_value', true);
 
if($meta_box_value == "")
$meta_box_value = $meta_box['std'];
 
echo '<input type="hidden" name="'.$meta_box['name'].'_noncename" id="'.$meta_box['name'].'_noncename" value="'.wp_create_nonce( plugin_basename(__FILE__) ).'" />';
  
echo '<p>'.$meta_box['title'].'</p>';
 
echo '<textarea rows="5" cols="150" name="'.$meta_box['name'].'_value" size="55" >'.$meta_box_value.'</textarea><br>';
 
echo '<p><label for="'.$meta_box['name'].'_value">'.$meta_box['description'].'</label></p>';
}
}

function mantra_create_meta_box() {
global $theme_name;
add_meta_box( 'new-meta-boxes', 'Mantra SEO - Description', 'mantra_meta_box_description', 'post', 'normal', 'high' );
add_meta_box( 'new-meta-boxes', 'Mantra SEO - Description', 'mantra_meta_box_description', 'page', 'normal', 'high' );
}

function mantra_save_postdata( $post_id ) {
global $post, $mantra_meta_box_description;
 
foreach($mantra_meta_box_description as $meta_box) {
// Verify
if ( !wp_verify_nonce( $_POST[$meta_box['name'].'_noncename'], plugin_basename(__FILE__) )) {
return $post_id;
}
 
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;
}
 
$data = $_POST[$meta_box['name'].'_value'];
 
if(get_post_meta($post_id, $meta_box['name'].'_value') == "")
add_post_meta($post_id, $meta_box['name'].'_value', $data, true);
elseif($data != get_post_meta($post_id, $meta_box['name'].'_value', true))
update_post_meta($post_id, $meta_box['name'].'_value', $data);
elseif($data == "")
delete_post_meta($post_id, $meta_box['name'].'_value', get_post_meta($post_id, $meta_box['name'].'_value', true));
}
}
if ($mantra_seo_gen_desc=="Manual") {
    add_action('admin_menu', 'mantra_create_meta_box');
    add_action('save_post', 'mantra_save_postdata');
}
?>

Pour marque-pages : Permaliens.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *