Intereting Posts
Как настроить сайт WordPress на сервере до того, как домен будет готов? После оплаты e-junkie отправьте сообщение http для регистрации пользователя автоматически? Предотвратите дополнительные категории верхнего уровня, но разрешите больше детей Выберите столбец боковых панелей на странице widgets.php Изучение Html и новая разработка и разработка WordPress Перезаписывание автоматически добавленного запроса NOT IN в WP_Query Я пытаюсь создать простую форму интерфейса для публикации Изменение CSS API-интерфейса Customizer Полноэкранный ползунок автоматическое добавление элементов подменю Сервер подчеркнул / фид Как вставить название категории над заголовком сообщения в плагин с расширенными плагинами? Кодовая таблица структуры базы данных Shortcode для отображения всех сообщений из категории на странице Программно вставить сообщение, как если бы это было сделано через панель администратора

Добавление фильтра в qTranslate для изменения отображения выбора языка

Это проблема, с которой я сталкиваюсь с qTranslate, но я полагаю, что решение является скорее инструкцией о том, как работают манипуляторы WordPress и фильтры.

Вместо использования виджета qTranslate я использую hook

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

для вызова выбора языка в моем заголовке, а затем изменения его внешнего вида в моем CSS. Это не проблема. Тем не менее, я хотел бы добавить «стиль» к функции «Выбор языка», чтобы вместо отображения полного текста на языке, который был бы «Francais» и «английский» в моем случае, вместо него будет отображаться только код языка ( EN и FR ). Я понял это, изменив (и я знаю, что это очень плохо) qtranslate_widget.php и добавление нового случая для функции qtrans_generateLanguageSelectCode($style='', $id='') .

Это отлично поработало, но затем я обновил WordPress и должен был обновить qTranslate, так что, очевидно, моя модификация исчезла. Поэтому вместо повторного выполнения этой операции мне было интересно, есть ли у кого-нибудь предложения по добавлению фильтра в функцию в функции 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="'.qtrans_convertURL($url, $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="'.qtrans_convertURL($url, $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[\r\n"; 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="'.qtrans_convertURL($url, $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; } } 

Solutions Collecting From Web of "Добавление фильтра в qTranslate для изменения отображения выбора языка"

В моем header.php , где я хочу, чтобы язык выбора qTranslate был доступен, я помещал это в:

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

Затем я добавил этот код в functions.php . Это немного избыточно, поскольку он повторяет встроенные опции qTranslate (изображение, текст, выпадающее меню), которые я не использую на своей странице, но я хотел сохранить код, так как мой фильтр перезаписывает функцию qtrans_generateLanguageSelectCode . (Если кто-нибудь может понять, как просто добавить стиль и не перезаписать всю функцию, это было бы потрясающе!)

Стиль, который я использую, называется «код» (вы увидите его внизу) и просто выводит код языка – то есть: FR и EN в моем случае. Вы можете написать любой вывод, который вы хотите, создав новый стиль:

 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="' . qtrans_convertURL( $url, $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[\r\n"; 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="' . qtrans_convertURL( $url, $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; 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="' . qtrans_convertURL( $url, $language ) . '" 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 не будут работать должным образом, и вы не сможете попасть на свой сайт!

Извините, я взял немного времени, чтобы вернуться, я не веб-разработчик по профессии, поэтому я не коснулся этого материала через несколько месяцев. Я полностью самоучка, поэтому моя терминология может быть немного неясной. Но я надеюсь, что это поможет!