Tambah tag hreflang secara automatik dalam berbilang tapak subdirektori WordPress
P粉884548619
P粉884548619 2024-03-26 23:24:10
0
2
403

Kami mempunyai persediaan rangkaian subdirektori WordPress MU:

  • www.example.com - Laman web utama, AS, global
  • www.example.com/uk/ - Ditunjukkan kepada pelawat UK
  • www.example.com/au/ - Ditunjukkan kepada pelawat Australia.

Kami mahu menambah tag hreflang pada setiap halaman web dan mengecualikan locations jenis siaran tersuai.

Daripada soalan ini, saya menyesuaikan kod dalam tema kanak-kanak functions.php Kepada:

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" />';
        
   }

}

Kod ini berfungsi untuk halaman utama tapak web utama dan halaman contoh: 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" />

Ia berfungsi dengan:

  • Laman utama laman web AU,
  • Halaman fungsi laman web AU: https://www.example.com/au/features/,

Tetapi pada www.example.com/uk/ ia hanya menghasilkan:

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

Tiada:

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

Halaman ciri ialah halaman WordPress yang ringkas.

Terima kasih atas bantuan.

Edit

Jika saya tambah if ($lang == 'uk') {print_r(get_headers($updated_url_lang_path));} saya nampak:

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
)

Dan tambahkan yang berikut dengan betul:

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

Namun, saya hanya dapat melihat ini apabila log masuk ke WordPress.

Dalam tetingkap inkognito, pada https://www.example.com/uk/ Saya nampak (hanya):

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

P粉884548619
P粉884548619

membalas semua(2)
P粉701491897

Hei Steve, gunakan kod ini, ia akan berfungsi dengan baik! ! !

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 ''. 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 ''. PHP_EOL;
    }
   }
  }
}
add_action('wp_head', 'mm_add_hreflang_attribute', 1);
P粉476883986

Saya menukar kod kepada:

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 ''. 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 ''. PHP_EOL;
            }
        }
    }
}
add_action('wp_head', 'mm_add_hreflang_attribute', 1);

Ia berfungsi dengan baik.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!