0

我已经设法编写了一个完成工作的函数,但我觉得必须有更好的方法来做到这一点。

我有一个使用子目录设置运行的 WordPress 多站点网络。有一个主站点是英文的,还有几个子站点大部分都被翻译成其他语言。翻译正在进行中,网络中的每个站点还没有等效的页面/帖子。对于存在于英文网站上但尚未出现在西班牙文网站上的帖子,hreflang 标记 forwebsite.com/some-blog-post将返回 404 for website.com/es/some-blog-post

我暂时把这个功能放在了主题的functions.php文件里。站点主题是用 Timber/Twig 制作的,并且没有header.php文件,因此要将其添加到模板或部分模板中需要进行一些结构重构。我使用 2 字母代码作为文本字符串,以便轻松插入hreflangURL 中的相应子目录和子目录。

考虑到这些限制,这似乎是最可行的解决方案,尽管 PHP 不是我的强项。如果有更好的方法,我全力以赴。

 /**
 * 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('/'))); // path of page after base URL

    // get primary English site URL and page path
    echo '<link rel="alternate" href="' . $site_url . $page_path . '" 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 . '/' . $page_path;
        $url_headers = @get_headers($updated_url_lang_path);
        if($url_headers && strpos( $url_headers[0], '200')) {
            echo '<link rel="alternate" href="' . $updated_url_lang_path . '" hreflang="' . $lang . '" />'. PHP_EOL;
        }
    }

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

再次,它有效,但如果可以的话,我想把它做得更好。先发制人地感谢任何指点,新年快乐!

4

0 回答 0