Rumah > Soal Jawab > teks badan
Kami mempunyai persediaan rangkaian subdirektori WordPress MU:
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:
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粉7014918972024-03-27 19:54:34
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粉4768839862024-03-27 10:01:07
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.