Con este tutorial os mostraré cómo cambiar las banderas de Polylang que trae por defecto por otras más vistosas y con un diseño mejorado y más atractivo.
Este método, aunque alguno piense que puede que no sea la forma más adecuada de hacerlo, es la mejor forma que he encontrado para que cada vez que actualice el plugin no pierda los iconos de las banderas y tenga que aplicar el cambio cada vez.
De esta manera, tendremos siempre nuestras banderas personalizadas independientemente de las actualizaciones del plugin Polylang.
Este es el diseño original del widget de Polylang.
Como podéis ver, las banderas de Polylang aparecen en orden vertical. Esto es porque el widget es personalizable y podemos mostrar también los nombres. Pero en mi caso no quiero mostrar los nombres de las banderas, solo quiero mostrar los iconos. Por lo que cambiaré el diseño para que salgan alineadas horizantalmente una al lado de otra.
Tabla de contenidos
Paso 1 - Poner las banderas en horizontal
Primero voy a modificar el estilo del widget de las banderas en la hoja de estilos de nuestro theme para terminar de adaptarlo a nuestro entorno. Tenemos que incluir estos estilos en el fichero style.css de nuestro tema:
/* Polylang */ .widget_polylang_header { text-align: right; } .widget_polylang { margin-top: 5px; } .widget_polylang li { display: inline; } .widget_polylang li a img { height: 40px; }
Si refrescamos la página veremos que ya nos aparecen los iconos alineados horizontalmente pero todavía con el icono original.
Paso 2 - Subir los nuevos iconos
Ahora subiremos los nuevos iconos a nuestro wordpress. Los vamos a subir a una carpeta nueva que vamos a llamar por ejemplo img y que vamos a crear bajo nuestro Theme. En este caso he realizado el tutorial con el Theme Seventeen:
\wp-content\themes\twentyseventeen\img
El objetivo es cambiar las banderas de Polylang originales:
Por estas otras más vistosas y elegantes:
Descarga estos iconos GRATIS. Solo te pido que te suscribas al Blog. No te enviaré SPAM. Me gusta menos que a tí.
Paso 3 - Crear un filtro para cambiar las banderas de Polylang
Ahora vamos a crear un Filtro de Wordpres para cambiar las banderas de Polylang. Este código reemplazará en tiempo de ejecución la bandera original por la que hayamos subido a nuestra web.
add_filter('pll_the_languages', 'banderas_polylang', 10, 2); function banderas_polylang($output, $args) { // Reemplazamos el icono de las banderas que viene por defecto por otro icono más vistoso $spain_old='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAALCAIAAAD5gJpuAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAFnSURBVHjaYvzPgAD/UNlYEUAAmuTYAAAQhAEYqF/zFbe50RZ1cMmS9TLi0pJLRjZohAMTGFUN9HdnHgEE1sDw//+Tp0ClINW/f0NIKPoFJH/9//ULyGaUlQXaABBALAx/Gf4zAt31F4i+ffj3/cN/XrFfzOx//v///f//LzACM/79ZmD8/e8TA0AAMYHdDVT958vXP38nMDB0s3x94/Tj5y+YahhiAKLfQKUAAcQEdtJfoDHMF2L+vPzDmFXLelf551tGFOOhev4A/QgQQExgHwAd8IdFT/Wz6j+GhlpmXSOW/2z///8Eq/sJ18Dw/zdQA0AAMQExxJjjdy9x2/76EfLz4MXdP/i+wsyGkkA3Aw3984cBIIAYfzIwMKel/bt3jwEaLNAwgZIQxp/fDH/+MqqovL14ESCAWICeZvr9h0FSEhSgwBgAygFDEMT+wwAhgQgc4kAEVAwQQIxfUSMSTxxDAECAAQAJWke8v4u1tAAAAABJRU5ErkJggg=='; $spain=get_stylesheet_directory_uri()."/img/Spain.png"; $portugal_old="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAALCAIAAAD5gJpuAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAG8SURBVHjaYmSIZGD4wgAF/xgYWBj+boQysSKAAGJh+MRQnVoNUgEE///9ZfzLoPiX4e8fxj9/mP/8Yfr9+/+fP/9h5JdNmwACiIWBCaj4/5P3T7mY/xoJ/9UR/v0n8O+f17/Zlv/+//73/1+////+9f/XL6BqRllZoA0AAcQCNvv/339/C03+8v/8w7bk7+/vv/+7/P4S95ur+xdY9W+IBobfv4EaAAKICeiuv////vnz58PX3xxb/7BlN3/K7Ph1WoSR/fcfhl//f4KN/wW1BGg6QAAxMfxi+PP37++/v1kYfn//+usnE+cHCbWfTKz/mH7+ZgUpQmj48wdoA0AAsQA1/P0HZP458/qXqvNfjdnVItxy3wNvApUIvwPb8BvqJEawkwACiIXhDwPQ+F9/f+2890dY6/cnrycCb++z3frNfOwX01eEagZgKAHdzcAAEEAgG4DGA/W8+fO79+Rvdt5f2+b++sP+m+kdWDVEwx+gBmBY/wX6ASCAWBi+Mfz+80eSX/L3n99AzwBDm0H2NwtQHS/QapDBIPT3LwQBnQQQQIwMxgwM7xgYfjAArQKRTAyvP2OPYwgACDAAjtdGduN8tIgAAAAASUVORK5CYII="; $portugal=get_stylesheet_directory_uri()."/img/Portugal.png"; $unitedkingdom_old="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAALCAIAAAD5gJpuAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAflJREFUeNpinDRzn5qN3uFDt16+YWBg+Pv339+KGN0rbVP+//2rW5tf0Hfy/2+mr99+yKpyOl3Ydt8njEWIn8f9zj639NC7j78eP//8739GVUUhNUNuhl8//ysKeZrJ/v7z10Zb2PTQTIY1XZO2Xmfad+f7XgkXxuUrVB6cjPVXef78JyMjA8PFuwyX7gAZj97+T2e9o3d4BWNp84K1NzubTjAB3fH0+fv6N3qP/ir9bW6ozNQCijB8/8zw/TuQ7r4/ndvN5mZgkpPXiis3Pv34+ZPh5t23//79Rwehof/9/NDEgMrOXHvJcrllgpoRN8PFOwy/fzP8+gUlgZI/f/5xcPj/69e/37//AUX+/mXRkN555gsOG2xt/5hZQMwF4r9///75++f3nz8nr75gSms82jfvQnT6zqvXPjC8e/srJQHo9P9fvwNtAHmG4f8zZ6dDc3bIyM2LTNlsbtfM9OPHH3FhtqUz3eXX9H+cOy9ZMB2o6t/Pn0DHMPz/b+2wXGTvPlPGFxdcD+mZyjP8+8MUE6sa7a/xo6Pykn1s4zdzIZ6///8zMGpKM2pKAB0jqy4UE7/msKat6Jw5mafrsxNtWZ6/fjvNLW29qv25pQd///n+5+/fxDDVbcc//P/zx/36m5Ub9zL8+7t66yEROcHK7q5bldMBAgwADcRBCuVLfoEAAAAASUVORK5CYII="; $unitedkingdom=get_stylesheet_directory_uri()."/img/UnitedKingdom.png"; // La variable $output contiene el código HTML por defecto que pinta las baderas en formato lista <ul><li>. // A esta le cambiamos los iconos por defecto por otros más vistosos. $urls = str_replace($unitedkingdom_old,$unitedkingdom,str_replace($portugal_old,$portugal,str_replace($spain_old,$spain,$output)));//polylang_shortcode() return $urls; }
Con este último habremos cambiado las banderas por los iconos alternativos que quiero utilizar.
Si queremos cambiar el icono de otras banderas, tendremos que utilizar el inspector de elementos de las herramientas de desarrollador de nuestro navegador. En el caso de Firefox y Chrome se abre pulsando la tecla F12. Debemos colocarnos sobre la bandera y localizar este código:
Después hacemos doble clic sobre el elemento "data:image/png;base64" para mostrarlo al completo:
Y copiamos el código completo que será el que utilizaremos en la función que os mostré arriba donde haremos el reemplazo correspondiente. Tendréis que añadir las variables adicionales que necesitéis y completar con los idiomas que queráis mostrar.
El resultado será parecido a este:
Funciones API de Polylang
Para más información sobre las funciones API de Polylang para poder realizar alguna adaptación más a nuestro gusto este es el enlace para consultar las Funciones API de Polylang.
Shortcode Polylang
Este es un Shortcode para poder colocar las banderas de Polylang en cualquier parte de nuestro tema WordPress.
Tenemos que colocar el código en el fichero functions.php de nuestro Theme:
// Polylang Shortcode - https://wordpress.org/plugins/polylang/ // Add this code in your functions.php // Put shortcode [polylang] to post/page for display flags // Sacado de: https://gist.github.com/taninbkk/f95281b44b3762435777 function polylang_shortcode() { ob_start(); pll_the_languages(array('show_flags'=>1,'show_names'=>0)); $flags = ob_get_clean(); return $flags; } add_shortcode( 'polylang', 'polylang_shortcode' );
Por ejemplo. Si queremos mostrar las banderas en el header, tenemos que hacer la llamada desde el Header.php para insertar nuestro Widget de Banderas:
<!-- BANDERAS POLYLANG --> <!--<div id="banderas"><ul>--> <div class="widget_polylang widget_polylang_header"><ul> <?php //echo banderas_polylang(polylang_shortcode(), ''); if (function_exists('banderas_polylang')) { // Llamamos a la función banderas_polylang para que muestre nuestro widget de banderas con estilo personalizado echo banderas_polylang(polylang_shortcode(), ''); } else { //error_log("La función 'banderas_polylang' no existe en el fichero functions.php del theme.", 0); } $spain_old='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAALCAIAAAD5gJpuAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAFnSURBVHjaYvzPgAD/UNlYEUAAmuTYAAAQhAEYqF/zFbe50RZ1cMmS9TLi0pJLRjZohAMTGFUN9HdnHgEE1sDw//+Tp0ClINW/f0NIKPoFJH/9//ULyGaUlQXaABBALAx/Gf4zAt31F4i+ffj3/cN/XrFfzOx//v///f//LzACM/79ZmD8/e8TA0AAMYHdDVT958vXP38nMDB0s3x94/Tj5y+YahhiAKLfQKUAAcQEdtJfoDHMF2L+vPzDmFXLelf551tGFOOhev4A/QgQQExgHwAd8IdFT/Wz6j+GhlpmXSOW/2z///8Eq/sJ18Dw/zdQA0AAMQExxJjjdy9x2/76EfLz4MXdP/i+wsyGkkA3Aw3984cBIIAYfzIwMKel/bt3jwEaLNAwgZIQxp/fDH/+MqqovL14ESCAWICeZvr9h0FSEhSgwBgAygFDEMT+wwAhgQgc4kAEVAwQQIxfUSMSTxxDAECAAQAJWke8v4u1tAAAAABJRU5ErkJggg=='; $spain=get_stylesheet_directory_uri()."/img/Spain.png"; $portugal_old="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAALCAIAAAD5gJpuAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAG8SURBVHjaYmSIZGD4wgAF/xgYWBj+boQysSKAAGJh+MRQnVoNUgEE///9ZfzLoPiX4e8fxj9/mP/8Yfr9+/+fP/9h5JdNmwACiIWBCaj4/5P3T7mY/xoJ/9UR/v0n8O+f17/Zlv/+//73/1+////+9f/XL6BqRllZoA0AAcQCNvv/339/C03+8v/8w7bk7+/vv/+7/P4S95ur+xdY9W+IBobfv4EaAAKICeiuv////vnz58PX3xxb/7BlN3/K7Ph1WoSR/fcfhl//f4KN/wW1BGg6QAAxMfxi+PP37++/v1kYfn//+usnE+cHCbWfTKz/mH7+ZgUpQmj48wdoA0AAsQA1/P0HZP458/qXqvNfjdnVItxy3wNvApUIvwPb8BvqJEawkwACiIXhDwPQ+F9/f+2890dY6/cnrycCb++z3frNfOwX01eEagZgKAHdzcAAEEAgG4DGA/W8+fO79+Rvdt5f2+b++sP+m+kdWDVEwx+gBmBY/wX6ASCAWBi+Mfz+80eSX/L3n99AzwBDm0H2NwtQHS/QapDBIPT3LwQBnQQQQIwMxgwM7xgYfjAArQKRTAyvP2OPYwgACDAAjtdGduN8tIgAAAAASUVORK5CYII="; $portugal=get_stylesheet_directory_uri()."/img/Portugal.png"; $unitedkingdom_old="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAALCAIAAAD5gJpuAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAflJREFUeNpinDRzn5qN3uFDt16+YWBg+Pv339+KGN0rbVP+//2rW5tf0Hfy/2+mr99+yKpyOl3Ydt8njEWIn8f9zj639NC7j78eP//8739GVUUhNUNuhl8//ysKeZrJ/v7z10Zb2PTQTIY1XZO2Xmfad+f7XgkXxuUrVB6cjPVXef78JyMjA8PFuwyX7gAZj97+T2e9o3d4BWNp84K1NzubTjAB3fH0+fv6N3qP/ir9bW6ozNQCijB8/8zw/TuQ7r4/ndvN5mZgkpPXiis3Pv34+ZPh5t23//79Rwehof/9/NDEgMrOXHvJcrllgpoRN8PFOwy/fzP8+gUlgZI/f/5xcPj/69e/37//AUX+/mXRkN555gsOG2xt/5hZQMwF4r9///75++f3nz8nr75gSms82jfvQnT6zqvXPjC8e/srJQHo9P9fvwNtAHmG4f8zZ6dDc3bIyM2LTNlsbtfM9OPHH3FhtqUz3eXX9H+cOy9ZMB2o6t/Pn0DHMPz/b+2wXGTvPlPGFxdcD+mZyjP8+8MUE6sa7a/xo6Pykn1s4zdzIZ6///8zMGpKM2pKAB0jqy4UE7/msKat6Jw5mafrsxNtWZ6/fjvNLW29qv25pQd///n+5+/fxDDVbcc//P/zx/36m5Ub9zL8+7t66yEROcHK7q5bldMBAgwADcRBCuVLfoEAAAAASUVORK5CYII="; $unitedkingdom=get_stylesheet_directory_uri()."/img/UnitedKingdom.png"; $urls = str_replace($unitedkingdom_old,$unitedkingdom,str_replace($portugal_old,$portugal,str_replace($spain_old,$spain,polylang_shortcode()))); //echo polylang_shortcode(); //echo $urls; ?> </ul></div> <!-- FIN - BANDERAS POLYLANG -->
Conclusiones
Con este tutorial hemos conseguido cambiar los iconos que trae el Plugin Polylang por otros más vistosos y también hemos aprendido a mostrar las banderas en otra parte de nuestra web con un shortcode WordPress que hemos utilizado gracias a las funciones API Polylang. De esta manera podemos actualizar el plugin Polylang sin preocuparnos de perder los iconos que hayamos reemplazado.
No me funciona, creo que el código está mal. Está todo comentado, no?
Debería funcionar. Si te sale comentado puede que al pegarlo en wordpress me haya puesto todo el código en una línea y por eso te sale comentado. Lo reviso en cuanto pueda. Saludos y gracias por el aviso.
Ya está corregido Serafin. Era culpa del editor de código. Un saludo.
Hola, Javier.
Gracias por tu ayuda en todo 😉
He probado el código del paso 1 para poner las banderas en horizontal, pero siguen saliendo en vertical solo que más grandes. Lo he insertado en el style.css de tema Nirvana y nada.
¿Alguna idea?
Gracias.
Hola Antonio. Si añades esto a la hoja de estilos te funciona:
.widget-container ul li {
float: left !important;
}
Pero estarías sobreescribiendo un estilo del tema nirvana, por lo que estarías cambiando también el estilo de otro elemento. Habría que analizar a qué afecta, por lo que seguramente tengas que hacer más ajustes.
Un saludo, Javier.
Javier, eres un crack, me has dado la base para solucionarlo sin que afecte a otros widget:
.widget_polylang li {
display: inline;
float: left !important;
}
Muchas gracias por tu ayuda, evidentemente me he suscrito a tu boletín y lo siento por ti pero es posible que vuelva a recurrir a solicitarte ayuda 😉
De verdad, gracias!!!!!!
¡¡¡Saludos!!!
Aunque tengo algunos conocimientos de informática, estoy entrando ahora en WordPress y estoy totalmente verde. Pero viendo la explicación y la forma en que haces lo de las banderas, me ha abierto las puertas a la programación más o menos directa dentro de wordpress.
El CSS ha funcionado prefecto.
El resto no lo he probado porque todavía no lo entiendo (no parece complicado).
De momento voy a sustituir las banderas originales por las tuyas y usar el CSS que has puesto, adaptado a mis necesidades.
El tutorial... muy claro, fácil y rápido de seguir.
muchas gracias
Buenas Ángel!. La verdad es que este tutorial es un buen ejemplo para ver las posibilidades que ofrece WordPress con los plugins. Yo no programo, pero este tipo de cosas sencillas, con saber un poco de PHP es más que suficiente para poder hacer cositas de este tipo. Saludos!
Hola. Hemos hablado por Facebook hace un rato. Tengo una pregunta ¿En qué archivo php hay que poner el filtro?
Gracias.
Hola Blas. Lo tienes que poner en el fichero functions.php de tu theme. Saludos!
Gracias!!
Hay alguna forma de poner un option personalizado nivel 0?
Hola Laia. No entiendo a qué te refieres. Si me puedes concretar... Un saludo.
Hola. Me gustaría conseguir cambiar las banderas pero soy muy nueva en esto. Ya he creado la carpeta y subido los nuevos iconos. Pero, dónde tengo que insertar el código para crear el filtro de WordPress?
Hola Sara. Lo tienes que añadir en el fichero functions.php de tu theme o en el plugin de funciones. Un saludo.
Hola Javier, acabo de encontrar tu post sobre Polylang y creo que puedes ayudarme. Lo mío creo que es muy sencillo. Sólo quiero cambiar los textos de Español - Inglés y Spanish - English por ES/EN EN/ES. Es posible?
Muchas gracias de antemano.
Saludos.
Hola. Pues creo que es tan sencillo como editar los nombres de los idiomas desde el menú Idiomas que tienes en la barra del lateral izquierdo del escritorio. Un saludo.
Pues muchísimas gracias. No había caído en esa opción, la más obvia y sencilla...
Hola tengo una pregunta ¿Cómo hago para agregar una imagen en el theme. Gracias. Porfa es para un proyecto te agradezco, si me puedes responder lo mas rapido posible
No entiendo tu pregunta en relación con Polylang. Si puedes aclararlo a lo mejor te puedo decir. Un saludo.
Hola Javier, como podría cambiar el tamaño de las banderas del selector del menú?
Hola David. Tienes que subir las imágenes con el tamaño que te interese, y después puede que tengas que revisar el HTML o CSS donde se incrustan. Primero prueba a subirlas con el tamaño que te interesa, y si no te funciona, pues ya editas el html y css. Un saludo, Javier.
Hola Javier, me gustaría poner la opción de cambio de idioma con sus banderitas, en la parte inferior de la página. ¿Es posible y desde dónde podría hacerlo?
Hola Nuria. Creo que te refieres al widget. Solo tienes que añadirlo en alguna zona de widgets del pie de tu plantilla WordPress. Un saludo.
Hola Javier,
muchas gracias por el tutorial pero no logro que funcione.
Al editar el function.php de mi tema "divi" me de error de syntaxys. En particular las líneas del html.
¿Podrías ayudarme? Gracias de antemano.
Parece que el código del paso 3 no está bien. Tengo que buscar si lo tengo por ahí anotado para corregirlo. A veces los plugins de WordPress me hacen esto, me rompe los trozos de código que os comparto. Si lo encuentro te aviso. Un saludo.
¿Ya lo has encontrado?
Porque no funciona no quitando las etiquetas y que se te han colado.
Buenas! Ya he actualizado todos los códigos. Prueba de nuevo. Ya debería funcionarte. Un saludo.
Hola, Javier, hay forma de que se muestre en el Header la bandera del idioma que no esta? o sea, si estoy en español, pues que se muestre la bandera de UK... y si estoy en la versión inglés que solo se muetsre la bandera de españa- Es facible?
Hola Pablo. No sabría decirte. No tengo ahora mismo ningún sitio WordPress con Polylang. A lo mejor es tan simple que con CSS no se oculte esa capa. Habría que mirar cómo se construye esa parte e intentar sobreescribirla. Un saludo.