1

我有一个双语(英语/法语)网站。

我有自定义帖子类型和自定义分类法,其翻译选项中的值为“不做任何事情”,这是为了不翻译此内容而做出的决定,我想保持这种方式。

我原以为网站的英文版和法文版都可以提供内容,但事实并非如此。内容始终在网站的默认语言版本中查看。与 WPML 支持交谈,只确认我的问题,他们总是对“什么都不做”内容使用默认语言。

我注意到,如果我添加?lang=fr到 url,内容将显示在网站的法语版本中。

我的问题是:

  1. 如何根据 url 检测内容是否具有“什么都不做”的值?
  2. 如何在这些内容的 url 中即时添加 '?lang=fr' ?
  3. 可以在不减慢网站速度的情况下做到这一点吗?

谢谢,

4

3 回答 3

0

对不起,苏 你可能需要这样的东西:

$id = icl_object_id($post->ID, 'page', false,ICL_LANGUAGE_CODE);
$page  = is_page($id);

http://wpml.org/documentation/support/creating-multilingual-wordpress-themes/language-dependent-ids/

于 2014-04-28T19:02:11.600 回答
0

您可以检测到,如果内容具有来自 WPML 的某些价值,那么您可以使用一些常量,例如:ICL_LANGUAGE_CODE http ://wpml.org/documentation/support/wpml-coding-api/

对于自定义 posttype 和自定义分类法,我可以推荐: http ://wpml.org/faq/how-to-translate-custom-types/

于 2014-04-28T17:57:33.343 回答
0

感谢拉迪斯拉夫的提议,

使用icl_object_id是一个好主意,但是在解决这个问题时,我意识到我不必担心内容是否设置了“什么都不做”的值,因为我已经知道了,而且它不会改变. 文档说明您必须关闭“使主题可以使用多种语言”,并且很难说这将如何影响主题,因为它是 ThemeForest 主题。

我希望有一个真正灵活的解决方案,因为这将解决我发现 WPML 如何管理不需要翻译的内容的问题。

但是,根据您的建议,我继续寻找答案,并为我的问题找到解决方案的开始。

首先,要编辑链接,我必须设置一个与我要编辑的链接类型相对应的“add_filter”。

add_filter( 'post_type_link', 'add_lang_fr', 10, 2 );
add_filter( 'term_link', 'add_lang_fr', 10, 2 );

然后,我测试 url 以确保它们与需要添加 ?lang=fr 的内容相匹配。

function add_lang_fr( $url, $post ) {

    if ('fr' == ICL_LANGUAGE_CODE) { // if current language is fr

        if ( 'article' == get_post_type( $post ) || FALSE !== strpos($url, 'article-tag') ) {   // if link goes to a CPT 'article' or have 'article-tag' in url

            return add_query_arg('lang', 'fr', $url); 
        } 
    }

    return ($url);

}

回答我最初的问题:

  1. 如何根据 url 检测内容是否具有“什么都不做”的值?- 我使用不同的方式过滤需要添加 ?lang=fr 的 url
  2. 如何在这些内容的 url 中即时添加 '?lang=fr' ?-add_query_arg是关键,因为它允许在 url 上添加查询参数......这正是我所需要的。
  3. 可以在不减慢网站速度的情况下做到这一点吗?-使用这个解决方案,我有 150 个额外的请求和 +16 秒的加载(测试的页面有大约 2000 个已编辑的 url)。

有没有办法减少调用次数并改善页面加载?

于 2014-04-29T15:32:11.917 回答