CoderFunda
  • Home
  • About us
    • Contact Us
    • Disclaimer
    • Privacy Policy
    • About us
  • Home
  • Php
  • HTML
  • CSS
  • JavaScript
    • JavaScript
    • Jquery
    • JqueryUI
    • Stock
  • SQL
  • Vue.Js
  • Python
  • Wordpress
  • C++
    • C++
    • C
  • Laravel
    • Laravel
      • Overview
      • Namespaces
      • Middleware
      • Routing
      • Configuration
      • Application Structure
      • Installation
    • Overview
  • DBMS
    • DBMS
      • PL/SQL
      • SQLite
      • MongoDB
      • Cassandra
      • MySQL
      • Oracle
      • CouchDB
      • Neo4j
      • DB2
      • Quiz
    • Overview
  • Entertainment
    • TV Series Update
    • Movie Review
    • Movie Review
  • More
    • Vue. Js
    • Php Question
    • Php Interview Question
    • Laravel Interview Question
    • SQL Interview Question
    • IAS Interview Question
    • PCS Interview Question
    • Technology
    • Other

17 May, 2022

Adding hreflang tags automatically in WordPress subdirectory multisite

 Programing Coderfunda     May 17, 2022     Laravel, Laravel-Question, php     No comments   

 We have a WordPress MU subdirectory network setup:

  • www.example.com - main website, USA, global
  • www.example.com/uk/ - to display for UK visitors
  • www.example.com/au/ - to display for Australian visitors.

We want to add hreflang tags for each webpage, and exclude the locations custom post type.

From this question, I've adjusted the code in the child theme's functions.php to:

function add_hreflang_attribute() {
   $site_url = network_site_url(); // base URL
   $alt_langs = array( '', 'au', 'uk' ); // two-letter language code
   $page_path = substr(get_permalink(), strlen(home_url('/'))); // path of page after base URL
   
   if (!( is_singular( 'locations' ) ) ) {
           
       // 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 . '/' . $page_path;
           $url_headers = @get_headers($updated_url_lang_path);
           if($url_headers && strpos( $url_headers[0], '200')) {
               if ($lang == 'uk') {
                   echo '<link rel="alternate" href="' . $updated_url_lang_path . '" hreflang="en-gb" />'. PHP_EOL;
               } elseif ($lang == '') {
                 
               }
               else {
                   echo '<link rel="alternate" href="' . $updated_url_lang_path . '" hreflang="en-' . $lang . '" />'. PHP_EOL;
               }
           }
       }
       
       // set primary as x-default
       echo '<link rel="alternate" href="' . $site_url . $page_path . '" hreflang="x-default" />';
        
   }

}

This code works on the main website's home page & example page: www.example.com/features/;

<link rel="alternate" href="https://www.example.com/au/features/" hreflang="en-au" />
<link rel="alternate" href="https://www.example.com/uk/features/" hreflang="en-gb" />
<link rel="alternate" href="https://www.example.com/features/" hreflang="x-default" />

and it works for the:

  • AU site's home page,
  • the AU site's features page: https://www.example.com/au/features/,

but on www.example.com/uk/ it only produces:

<link rel="alternate" href="https://www.example.com/au/" hreflang="en-au" />
<link rel="alternate" href="https://www.example.com/" hreflang="x-default" />

It is missing:

<link rel="alternate" href="https://www.example.com/uk/" hreflang="en-gb" />

The features page is a simple WordPress page.

Help appreciated.

EDIT

If I add if ($lang == 'uk') {print_r(get_headers($updated_url_lang_path));}, I see:

Array
(
    [0] => HTTP/1.1 200 OK
    [1] => Server: nginx
    [2] => Date: Wed, 11 May 2022 22:08:04 GMT
    [3] => Content-Type: text/html; charset=UTF-8
    [4] => Content-Length: 88422
    [5] => Connection: close
    [6] => Vary: Accept-Encoding
    [7] => Vary: Accept-Encoding
    [8] => Accept-CH: Sec-CH-UA-Mobile
    [9] => Link: <https://www.example.com/uk/wp-json/>; rel="https://api.w.org/"
    [10] => Link: <https://www.example.com/uk/wp-json/wp/v2/pages/10>; rel="alternate"; type="application/json"
    [11] => Link: <https://www.example.com/uk/>; rel=shortlink
    [12] => X-Powered-By: WP Engine
    [13] => X-Cacheable: SHORT
    [14] => Vary: Accept-Encoding,Cookie
    [15] => Cache-Control: max-age=600, must-revalidate
    [16] => X-Cache: HIT: 8
    [17] => X-Cache-Group: normal
    [18] => Accept-Ranges: bytes
    [19] => X-Orig-Cache-Control: no-cache
)

and the following is added properly:

<link rel="alternate" href="https://www.example.com/uk/" hreflang="en-gb" />

However, I only see this while logged into WordPress.

In an incognito window, at https://www.example.com/uk/ I see (only):

<link rel="alternate" href="https://www.example.com/" hreflang="x-default" />
phpwordpress



2 Answers



I


 altered the code to:

function mm_add_hreflang_attribute() {
    if (!( is_singular( 'locations' ) ) ) {
        $sites = array(
            array('', 'x-default'),
            array('en-gb/', 'en-gb'),
            array('en-au/', 'en-au'),
        );
        
        if ( is_post_type_archive('locations') ) {
            foreach ( $sites as $site ) {
                $site_url = network_site_url();
                $page_path = 'locations/';
                $geo_url = $site[0];
                $hreflang = $site[1];
                $url = $site_url . $geo_url . $page_path;
                echo '<link rel="alternate" href="' . $url . '" hreflang="' . $hreflang . '" />'. PHP_EOL;
            }
        } else {
            foreach ( $sites as $site ) {
                $site_url = network_site_url();
                $page_path = substr(get_permalink(), strlen(home_url('/')));
                $geo_url = $site[0];
                $hreflang = $site[1];
                $url = $site_url . $geo_url . $page_path;
                echo '<link rel="alternate" href="' . $url . '" hreflang="' . $hreflang . '" />'. PHP_EOL;
            }
        }
    }
}
add_action('wp_head', 'mm_add_hreflang_attribute', 1);












  • Share This:  
  •  Facebook
  •  Twitter
  •  Google+
  •  Stumble
  •  Digg
Email ThisBlogThis!Share to XShare to Facebook
Newer Post Older Post Home

0 comments:

Post a Comment

Thanks

Meta

Popular Posts

  • Laravel auth check login
          <?php     Laravel auth check login     use Illuminate\Support\Facades\ Auth ;     if ( Auth :: check()) {         // The use...
  • JqueryUI Tutorial
    JqueryUI Tutorial    JqueryUI is the most popular front end frameworks currently. It is sleek, intuitive, and powerful mobile first fr...
  • window.location.replace() is not working
    just wanna ask why does window.location.replace is not working in my page. I've been working on it for weeks. It works fine on my other ...
  • Comments in PHP in Hindi
    PHP में comments programmer को code समझने के लिए दिया जाता है | ये Comment lines server द्वारा read नहीं की जाती | PHP में दो प्रकार से comm...
  • Inertia and React or Vue
    Hi just checking your thoughts on whether to learn React or Vue, I want to learn React as it may be better to find work and it has a larger ...

Categories

  • Ajax (26)
  • Bootstrap (30)
  • DBMS (42)
  • HTML (12)
  • HTML5 (45)
  • JavaScript (10)
  • Jquery (34)
  • Jquery UI (2)
  • JqueryUI (32)
  • Laravel (1017)
  • Laravel Tutorials (23)
  • Laravel-Question (6)
  • Magento (9)
  • Magento 2 (95)
  • MariaDB (1)
  • MySql Tutorial (2)
  • PHP-Interview-Questions (3)
  • Php Question (13)
  • Python (36)
  • RDBMS (13)
  • SQL Tutorial (79)
  • Vue.js Tutorial (69)
  • Wordpress (150)
  • Wordpress Theme (3)
  • codeigniter (108)
  • oops (4)
  • php (853)

Social Media Links

  • Follow on Twitter
  • Like on Facebook
  • Subscribe on Youtube
  • Follow on Instagram

Pages

  • Home
  • Contact Us
  • Privacy Policy
  • About us

Blog Archive

  • July (4)
  • September (100)
  • August (50)
  • July (56)
  • June (46)
  • May (59)
  • April (50)
  • March (60)
  • February (42)
  • January (53)
  • December (58)
  • November (61)
  • October (39)
  • September (36)
  • August (36)
  • July (34)
  • June (34)
  • May (36)
  • April (29)
  • March (82)
  • February (1)
  • January (8)
  • December (14)
  • November (41)
  • October (13)
  • September (5)
  • August (48)
  • July (9)
  • June (6)
  • May (119)
  • April (259)
  • March (122)
  • February (368)
  • January (33)
  • October (2)
  • July (11)
  • June (29)
  • May (25)
  • April (168)
  • March (93)
  • February (60)
  • January (28)
  • December (195)
  • November (24)
  • October (40)
  • September (55)
  • August (6)
  • July (48)
  • May (2)
  • January (2)
  • July (6)
  • June (6)
  • February (17)
  • January (69)
  • December (122)
  • November (56)
  • October (92)
  • September (76)
  • August (6)

Loading...

Laravel News

Loading...

Copyright © CoderFunda | Powered by Blogger
Design by Coderfunda | Blogger Theme by Coderfunda | Distributed By Coderfunda