如果您这样做,您可能很容易破坏任何其他与帖子内容相关的插件,如自定义图库、摘录插件等。我认为有一种破坏性较小的方式来实现你(我们)的目标。
当即将显示帖子时,功能qtrans_useCurrentLanguageIfNotFoundShowAvailable
由qTranslate调用,作为筛选器附加在the_content
钩
由于wordpress主题是在插件之后执行的(我假设您编写的是主题而不是插件),因此您可以用自己的钩子替换该钩子,输出您想要的语言。
您可以这样做(在functions.php文件中)
// Remove qTranslate default display hook.
// If this code breaks, update the parameters according to
// the qtranslate_hooks.php file of the plugin.
remove_filter(\'the_content\', \'qtrans_useCurrentLanguageIfNotFoundShowAvailable\', 0);
// Add a custom filter for the content
add_filter(\'the_content\', \'qtrans_useLanguagesIDecide\', 0);
function qtrans_useLanguagesIDecide($content) {
$YOUR_LANGUAGES = array(\'en\', \'fr\');
$output = \'\';
foreach($YOUR_LANGUAGES as $language)
$output .=
\'<div class="language-\'.$language.\'">\'.
qtrans_use($language, $content, true).
\'</div>\';
return $output;
}
还请注意,您可能希望类似地覆盖其他挂钩,如
the_excerpt
或
the_content_rss
.
如果您的博客可能没有每个帖子的所有语言(如我的),您可能还需要改进过滤器,以避免出现“抱歉,此条目仅在法语中可用”的消息,而不是偶尔丢失的英语翻译:
function qtrans_useLanguagesIDecide($content) {
$YOUR_LANGUAGES = array(\'en\', \'fr\');
$show_languages = $YOUR_LANGUAGES;
$qtranslate_languages = qtrans_split($content); // take a peek at translated content
foreach($show_languages as $key => $language) {
$translated_content = isset($qtranslate_languages[$language]) ? trim($qtranslate_languages[$language]) : \'\';
if(empty($translated_content))
// remove missing language
unset($show_languages[$key]);
}
$output = \'\';
foreach($show_languages as $language)
$output .=
\'<div class="language-\'.$language.\'">\'.
qtrans_use($language, $content, true).
\'</div>\';
return $output;
}
在这种情况下,不要试图使用
$translated_content
直接来说,因为qTranslate比我们做得更好。