問題描述

這是一個與 qTranslate 有關的問題,但我認為該解決方案更多的是指示如何使用 WordPress 的鈎子和過濾器。

而不是使用 qTranslate 小工具,我正在使用鈎子

<?php echo qtrans_generateLanguageSelectCode('text');?>

在我的標題中調用語言選擇器,然後在我的 CSS 中修改它的外觀。這沒問題但是,我想在語言選擇代碼功能中添加一個”style”,而不是顯示完整的語言文本,而在我的例子中,這將是”Francais” 和”English”,它將只顯示語言代碼 (ENFR) 。我已經通過改變 (我知道這是一件非常糟糕的事情),qtranslate_widget.php 並添加了一個新的案例來功能 qtrans_generateLanguageSelectCode($style='', $id='')

這樣做很棒,但是我更新了 Wordpress,不得不更新 qTranslate,所以顯然我的修改已經消失了。所以,而不是 re-doing 的操作,我想知道如果有人有任何建議如何添加一個過濾器的功能在我自己的主題的 functions.php?我認為這樣會是這樣的

add_filter('qtrans_generateLanguageSelectCode', 'qtrans_myLanguageSelectcode',

但之後,我迷路了,不瞭解過濾器。我希望這個很清楚!

當我更新,我顯然失去了我的修改,但我認為下面是應該工作 (我還沒有測試它!)

case 'code':
foreach(qtrans_getSortedLanguages() as $language) {
            $classes = array('lang-'.$language);
            if($language == $q_config['language'])
               $classes[] = 'active';
            echo '<a href="http://'.qtrans_convertURL($url,%20$language).'"  class="'. implode(' ', $classes) .'"';
            // set hreflang
            echo 'hreflang="'.$language.'" title="'.$q_config['language_name'][$language].'"';
            echo '>''.$language.'</a>';
         }
break;

不要讓這篇文章太長,但是以下是 qTranslate 插件中現有的函數:

    // Language Select Code for non-Widget users
function qtrans_generateLanguageSelectCode($style='', $id='') {
    global $q_config;
    if($style=='') $style='text';
    if(is_bool($style)&&$style) $style='image';
    if(is_404()) $url = get_option('home'); else $url = '';
    if($id=='') $id = 'qtranslate';
    $id .= '-chooser';
    switch($style) {
        case 'image':
        case 'text':
        case 'dropdown':
            echo '<ul class="qtrans_language_chooser" id="'.$id.'">';
            foreach(qtrans_getSortedLanguages() as $language) {
                $classes = array('lang-'.$language);
                if($language == $q_config['language'])
                    $classes[] = 'active';
                echo '<li class="'. implode(' ', $classes) .'"><a href="http://'.qtrans_convertURL($url,%20$language).'"';
                // set hreflang
                echo ' hreflang="'.$language.'" title="'.$q_config['language_name'][$language].'"';
                if($style=='image')
                    echo ' class="qtrans_flag qtrans_flag_'.$language.'"';
                echo '><span';
                if($style=='image')
                    echo ' style="display:none"';
                echo '>'.$q_config['language_name'][$language].'</span></a></li>';
            }
            echo "</ul><div class="qtrans_widget_end"></div>";
            if($style=='dropdown') {
                echo "<script type="text/javascript">n// <![CDATA[rn";
                echo "var lc = document.getElementById('".$id."');n";
                echo "var s = document.createElement('select');n";
                echo "s.id = 'qtrans_select_".$id."';n";
                echo "lc.parentNode.insertBefore(s,lc);";
                // create dropdown fields for each language
                foreach(qtrans_getSortedLanguages() as $language) {
                    echo qtrans_insertDropDownElement($language, qtrans_convertURL($url, $language), $id);
                }
                // hide html language chooser text
                echo "s.onchange = function() { document.location.href = this.value;}n";
                echo "lc.style.display='none';n";
                echo "// ]]>n</script>n";
            }
            break;
        case 'both':
            echo '<ul class="qtrans_language_chooser" id="'.$id.'">';
            foreach(qtrans_getSortedLanguages() as $language) {
                echo '<li';
                if($language == $q_config['language'])
                    echo ' class="active"';
                echo '><a href="http://'.qtrans_convertURL($url,%20$language).'"';
                echo ' class="qtrans_flag_'.$language.' qtrans_flag_and_text" title="'.$q_config['language_name'][$language].'"';
                echo '><span>'.$q_config['language_name'][$language].'</span></a></li>';
            }
            echo "</ul><div class="qtrans_widget_end"></div>";
            break;
    }
}

最佳解決方法

在我的 header.php 中,我想要 qTranslate 語言選擇者居住,我把它放在:

<?php echo qtrans_SelectCode('code');?>

然後,我將此代碼添加到 functions.php 。這有一點冗餘,因為它重複了我在我的頁面上沒有使用的內置 qTranslate 選項 (圖像,文本,下拉列表) – 但是我想保留代碼,因為我的過濾器覆蓋了 qtrans_generateLanguageSelectCode 功能。 (如果有人可以弄清楚如何只添加一個風格,而不是覆蓋整個功能,那將是非常棒的!)

我使用的樣式叫做’code'(你會看到它附近的底部),只是輸出語言代碼 – 即:FREN 在我的情況下。您可以通過創建新樣式來編寫所需的任何輸出:

if( function_exists( 'qtrans_getLanguage' ) )
{
// qTranslate Language Select Code filter

    add_filter( 'qtrans_generateLanguageSelectCode', 'qtrans_SelectCode' );

    function qtrans_SelectCode( $style = '', $id = '' ) {
        global $q_config;
        if( $style == '' )
            $style = 'text';
        if( is_bool( $style ) && $style )
            $style = 'image';
        if( is_404() )
            $url = get_option( 'home' );
        else
            $url = '';
        if( $id == '' )
            $id = 'qtranslate';
        $id .= '-chooser';
        switch( $style ) {
            case 'image':
            case 'text':
            case 'dropdown':
                echo '<ul class="qtrans_language_chooser" id="' . $id . '">';
                foreach( qtrans_getSortedLanguages() as $language ) {
                    $classes = array( 'lang-' . $language );
                    if( $language == $q_config['language'] )
                        $classes[] = 'active';
                    echo '<li class="' . implode( ' ', $classes ) . '"><a href="http://'%20.%20qtrans_convertURL(%20$url,%20$language%20)%20.%20'"';
                    // set hreflang
                    echo ' hreflang="' . $language . '" title="' . $q_config['language_name'][$language] . '"';
                    if( $style == 'image' )
                        echo ' class="qtrans_flag qtrans_flag_' . $language . '"';
                    echo '><span';
                    if( $style == 'image' )
                        echo ' style="display:none"';
                    echo '>' . $q_config['language_name'][$language] . '</span></a></li>';
                }
                echo "</ul><div class="qtrans_widget_end"></div>";
                if( $style == 'dropdown' ) {
                    echo "<script type="text/javascript">n// <![CDATA[rn";
                    echo "var lc = document.getElementById('" . $id . "');n";
                    echo "var s = document.createElement('select');n";
                    echo "s.id = 'qtrans_select_" . $id . "';n";
                    echo "lc.parentNode.insertBefore(s,lc);";
                    // create dropdown fields for each language
                    foreach( qtrans_getSortedLanguages() as $language ) {
                        echo qtrans_insertDropDownElement( $language, qtrans_convertURL( $url, $language ), $id );
                    }
                    // hide html language chooser text
                    echo "s.onchange = function() { document.location.href = this.value;}n";
                    echo "lc.style.display='none';n";
                    echo "// ]]>n</script>n";
                }
                break;
            case 'both':
                echo '<ul class="qtrans_language_chooser" id="' . $id . '">';
                foreach( qtrans_getSortedLanguages() as $language ) {
                    echo '<li';
                    if( $language == $q_config['language'] )
                        echo ' class="active"';
                    echo '><a href="http://'%20.%20qtrans_convertURL(%20$url,%20$language%20)%20.%20'"';
                    echo ' class="qtrans_flag_' . $language . ' qtrans_flag_and_text" title="' . $q_config['language_name'][$language] . '"';
                    echo '><span>' . $q_config['language_name'][$language] . '</span></a></li>';
                }
                echo "</ul><div class="qtrans_widget_end"></div>";
                break;

            case 'code':
                $count = 0;
                foreach( qtrans_getSortedLanguages() as $language ) {
                    if( $count > 0 )
                        print '  ';
                    $count++;
                    if( $language == $q_config['language'] ) {
                        print '<span class="qtrans_language_chooser active" title="' . $q_config['language_name'][$language] . '">';
                        print $language;
                        print '</span>';
                    }
                    else {
                        print '<a href="http://'%20.%20qtrans_convertURL(%20$url,%20$language%20)%20.%20'" class="qtrans_language_chooser"';
                        print ' hreflang="' . $language . '" title="' . $q_config['language_name'][$language] . '">';
                        print $language;
                        print '</a>';
                    }
                }
                break;
        }
    }      
}

將功能包括在內是重要的:

if(function_exists('qtrans_getLanguage'))

如果 qTranslate 插件中斷或停用它,否則您的 functions.php 將無法正常工作,您將無法訪問您的網站!

對不起,我花了一點時間回來,我不是一個專業的網絡開發者,所以我幾個月沒有碰到這個東西。我完全是 self-taught,這就是為什麼我的術語可能有點不清楚。但我希望這有幫助!

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。