Change WordPress html lang attribute based on template filename

This might be a rather seldom needed feature, but I need it for my blog (yes, this one).

As I am writing my blog posts in both english (for technical stuff) and german (for all the other stuff), I need to change the html’s lang attribute  to display the correct language code.

How am I using it?

I am using an extra template file for my english blog posts. The filename is single-english.php .  So whenever I am writing an english post like this one, I select the correct template for it.

This image shows my Template selector, which lets me chose between the standard template and the english post template.

Override WordPress‘ language_attributes function

To change the html’s lang attribute , we need to override the language_attributes  function. To do so, I inserted the following code into my theme’s functions.php  file.

Within this function, I get the page template used by the current post. I then check whether my filename is present in the returned template path. If so, I set the variable $lang  to en-US . The standard language is have pre-set is de-DE .

Veröffentlicht von

Christian Hänsel

Web-Entwickler, SEO-Experte. Ich liebe technisches SEO, die Entwicklung von neuen Ideen und alles rund um das Internet... ja, ich habe mein Hobby zum Beruf gemacht und gehe auch Montags gerne zur Arbeit.

3 Gedanken zu „Change WordPress html lang attribute based on template filename“

  1. Servus Chris,

    Bin auf deinem Blog gelandet, weil ich auf der Suche nach jemandem, der sich *wirklich* auskennt und deutsch spricht. Mir ist schon klar, dass du deswegen noch lange nicht dazu da bist um mir zu helfen. Trotzdem versuche ich einfach mein Glück: „Wie bzw. wo kann ich in WordPress 4.9.1 den Ländercode von DE auf AT korrigieren?“
    Nicht weil mich das DE stören würde, sondern weil ich gerne alles korrekt habe. Leider kenne ich mich zuwenig aus um zu wissen wonach ich genau googlen muss :-(
    Ein Linktip würde schon genügen.

    So oder so … Liebe Grüße aus Wien
    Günter

    1. Hallo Günter,

      Du könntest in Deiner header.php die folgende Zeile anpassen:
      < html < ?php language_attributes(); ?>>

      Hier schreibst Du dann zum Beispiel
      < html lang="de-AT">

      Du kannst die Datei editieren, indem Du im WordPress-Admin auf Design->Editor gehst und dann die Datei header.php auswählst.
      Bitte beachte, dass Änderungen an einem Theme verlorengehen, wenn das Theme ein Update bekommt. Daher solltest Du in diesem Fall besser mit einem Child-Theme arbeiten.

      Ich hoffe, das hilft Dir weiter :)

      Liebe Grüße
      Chris

  2. „Das Gute/Richtige liegt oft so nah.“! Ich habe, wie immer viel zu kompliziert gedacht.

    Danke für die rasche und unkomplizierte Antwort.

    Herzlichen Dank und Liebe Grüße
    Günter

Verfasse einen Kommentar