Automatisches Hinzufügen von hreflang-Tags in WordPress Multisite

Lesezeit: 3 Minuten

Ich habe es geschafft, eine Funktion zu schreiben, die die Arbeit erledigt, aber ich habe das Gefühl, dass es einen besseren Weg geben muss, dies zu tun.

Ich habe ein WordPress Multisite-Netzwerk, das mit dem Unterverzeichnis setup läuft. Es gibt eine primäre Website auf Englisch und mehrere untergeordnete Websites, die größtenteils in andere Sprachen übersetzt wurden. Die Übersetzung ist im Gange und es gibt noch keine entsprechende Seite/Post für jede Seite im Netzwerk. Für einen Beitrag, der auf der englischen Seite existiert, aber noch nicht auf der spanischen Seite, ein hreflang-Tag für website.com/some-blog-post wird ein 404 für zurückgeben website.com/es/some-blog-post.

Ich habe diese Funktion in die Themen platziert functions.php Datei vorerst. Das Site-Thema ist mit Timber/Twig erstellt und es gibt kein header.php Datei, so dass das Hinzufügen zu einer Vorlage oder einem Teil davon eine strukturelle Umgestaltung erfordern würde. Ich verwende den 2-Buchstaben-Code als Textzeichenfolge zum einfachen Einfügen in beide hreflang und entsprechendes Unterverzeichnis in der URL.

Dies scheint angesichts der Einschränkungen die praktikabelste Lösung zu sein, obwohl PHP nicht meine Stärke ist. Wenn es einen besseren Weg gibt, bin ich dafür.

 /**
 * ADD HREFLANG ATTRIBUTES
 * Automatically append hreflang with network URL, language, and permalink to all pages
 */
function add_hreflang_attribute() {
    $site_url = "network_site_url()"; // base URL 
    $alt_langs = array( 'de', 'es', 'fr' ); // two-letter language code
    $page_path = substr(get_permalink(), strlen(home_url("https://stackoverflow.com/"))); // path of page after base URL

    // get primary English site URL and page path
    echo '<link rel="alternate" href="'%20.%20$site_url%20.%20$page_path%20.%20'" hreflang="en" />'. PHP_EOL;

    // loop through the alternative languages, and get the appropriate hreflang tag for each that exists
    foreach ($alt_langs as $lang) {
        $updated_url_lang_path = $site_url . $lang . "https://stackoverflow.com/" . $page_path;
        $url_headers = @get_headers($updated_url_lang_path);
        if($url_headers && strpos( $url_headers[0], '200')) {
            echo '<link rel="alternate" href="'%20.%20$updated_url_lang_path%20.%20'" hreflang="' . $lang . '" />'. PHP_EOL;
        }
    }

    // set primary as x-default
    echo '<link rel="alternate" href="'%20.%20$site_url%20.%20$page_path%20.%20'" hreflang="x-default" />';
}
add_action('wp_head', 'add_hreflang_attribute', 1);

Auch hier funktioniert es, aber ich würde es gerne besser machen, wenn ich kann. Vorab vielen Dank für alle Hinweise und ein frohes neues Jahr!

  • Am Ende habe ich eingestellt $alt_langs = array( '', 'au', 'uk' ); um die hinzuzufügen uk & au wechselt auf der Hauptseite, wie ohne die ''das 'au & uk Alternativen wurden auf der Hauptseite nicht angezeigt.

    – Steve

    6. Mai um 7:15 Uhr


  • Ich habe Anpassungen vorgenommendie Hauptseite https://mandoestage.wpengine.com/features/ funktioniert gut, aber die AU-Site funktioniert überhaupt nicht https://mandoestage.wpengine.com/au/features/ (mit dem gleichen Thema). Irgendwelche Vorschläge?

    – Steve

    6. Mai um 8:52 Uhr

  • Schwer zu sagen, ohne den größeren Kontext Ihrer Website zu kennen, aber meine erste Vermutung wäre, dass Sie keine leeren Elemente auf Ihrer Website haben $alt_langs Reihe. Die Homepage ist die Standardeinstellung und relevant hreflang denn das gehört nicht dazu foreach Schleife.

    – Mike Jandreau

    11. Mai um 20:15 Uhr

  • Ich habe entfernt '' aus $alt_langs. Der Code funktioniert, wenn ich angemeldet bin, aber nicht in einem Inkognito-Fenster, in dem ich abgemeldet bin. Im Inkognito-Fenster sehe ich nur <link rel="alternate" href="https://www.example.com/" hreflang="x-default" />nicht der /au/, en-au oder /uk/, en-gbStellvertreter.

    – Steve

    11. Mai um 23:18 Uhr


  • Sehen diese Antwort für eine Alternativlösung.

    – Steve

    13. Mai um 4:30 Uhr

1016330cookie-checkAutomatisches Hinzufügen von hreflang-Tags in WordPress Multisite

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy