-
-
Save taninbkk/f95281b44b3762435777 to your computer and use it in GitHub Desktop.
// Polylang Shortcode - https://wordpress.org/plugins/polylang/ | |
// Add this code in your functions.php | |
// Put shortcode [polylang] to post/page for display flags | |
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' ); |
Hello,
meanwhile i used my brain and found the solution. both functions defined the same shortcode.
thatswhy i change the code that way:
// Polylang Shortcode - https://wordpress.org/plugins/polylang/
// Add this code in your functions.php
// Put shortcode [polylanguage] to post/page for display flags
function polylanguage_shortcode() {
ob_start();
pll_the_languages(array('show_flags'=>1,'show_names'=>0));
$flags = ob_get_clean();
return $flags;
}
add_shortcode( 'polylanguage', 'polylanguage_shortcode' );
Now the function is working. Unfortunately the flags are ordered under each other and having a dot. I want them beneath each other and without a dot. In addition i want the flags a bit bigger.
Could anyone help?
Regards
Colin
this works for me
<?php echo polylang_shortcode(); ?>
Does this works?
[polylang lang="en"]English[/polylang][polylang lang="de"]Deutsch[/polylang]
I adjusted the shortcode a bit to have more control over the styling
// Add this to your functions.php file
function polylang_flags_shortcode() {
ob_start();
pll_the_languages(array('show_flags'=>1,'show_names'=>0));
$flags = ob_get_clean();
return '<ul class="polylang-flags">' . $flags . '</ul>';
}
add_shortcode('POLYLANG', 'polylang_flags_shortcode');
Then add this CSS to your theme, either via the customize panel "Custom CSS" or a wp_enqueue_style
/* Polylang Flags Inline */
.polylang-flags {
list-style-type: none;
margin: 0;
padding: 0;
}
.polylang-flags li {
display: inline;
}
Use the Shortcode somewhere on your site
[POLYLANG]
Hello; I used the PHP code to add a shortcode, and the css to style. Both working fine.
Question: how can I hide the current language? What code do I need to add or modify?
Thanks
@taninbkk: It would be nice if this could be put into a WordPress plugin.
@andrewvink : thank you so much for this sharing. I just add your code to my theme, it actually works fine.
How do I show only languages names?
I adjusted the shortcode a bit to have more control over the styling
// Add this to your functions.php file function polylang_flags_shortcode() { ob_start(); pll_the_languages(array('show_flags'=>1,'show_names'=>0)); $flags = ob_get_clean(); return '<ul class="polylang-flags">' . $flags . '</ul>'; } add_shortcode('POLYLANG', 'polylang_flags_shortcode');
Then add this CSS to your theme, either via the customize panel "Custom CSS" or a wp_enqueue_style
/* Polylang Flags Inline */ .polylang-flags { list-style-type: none; margin: 0; padding: 0; } .polylang-flags li { display: inline; }
Use the Shortcode somewhere on your site
[POLYLANG]
Hello,
hope its not to late haha, I managed to do it and show the language instead of flags, and it shows and arrow besides the names of the languages but i cant find a way to change the color of that arrow.
Anyone has an idea of how to change it? if someone if still on this haha.
Thanks in advance
Thanks!
For those who wants to tweak the generated labels, take a look a the official documentation to see the available options.
Hi,
I was searching for a short code to get flags, but in wordpress administration the Language Switcher is not available, so i used this :
$pll_languges = pll_languages_list(['fields' => null]);
With this you will have an array of all Polylang PLL_Language
objects , so you can get flag using ->flag
on each array item.
And if you want only an array of flags and nothing else you can use :
$flags = pll_languages_list(['fields' => 'flag']);
Have fun :D
Hiding the current language flag is possible with 'hide_current' =>1 in the above array:
pll_the_languages(array('show_flags'=>1,'show_names'=>0,'hide_current'=>1'));
All possible elements of the language switcher array can be found in plugins/polylang/include/switcher.php right at the beginning of the file (Polylang v3.1.4).
Thanks a bunch for this!
Any guess on how to style the dropdown arrow for this? Im trying to replace it with a custom svg, but I couldnt get it with the one i targeted the rest of the menu drop-downs.
.et-menu .menu-item-has-children>a:first-child:after{ content: url(/dropdownarrow.svg); }
I couldnt get the target with inspect and was unable to find it in the plugin files (although im sure it is in there somewhere).
How to set user wise [POLYLANG] in wordpress?
To modify your polylang_shortcode so it:
1. Only shows languages other than the current one, and
2. Displays both flag and language name,
You can update the function like this:
function polylang_shortcode() {
ob_start();
pll_the_languages(array(
'dropdown' => 0,
'show_flags' => 1,
'show_names' => 1,
'hide_current' => 1, // Hides current language
'raw' => 0 // Output as HTML
));
return ob_get_clean();
}
add_shortcode('polylang', 'polylang_shortcode');
✅ Explanation:
• 'hide_current' => 1 – hides the current language.
• 'show_flags' => 1 – shows the language flag.
• 'show_names' => 1 – shows the language name.
• 'raw' => 0 – outputs HTML instead of raw array.
💡Usage:
Add [polylang] in any post, page, or widget, and it will display only the other available languages with both flag and name.
Hello,
i want to use two shortcodes for polylang
your one with [polylang]
and this one with:
// [polylang lang="en"]English[/polylang][polylang lang="de"]Deutsch[/polylang]
function polylang_shortcode($atts, $content = null)
{
if (empty($content))
return '';
extract( shortcode_atts( array('lang' => ''), $atts ) );
if (empty($lang))
return "
You must specify 'lang' using shortcode: polylang
";return ($lang == pll_current_language()) ? $content : '';
}
add_shortcode('polylang', 'polylang_shortcode');
But i am not able to combine them on my own. Could anyone help?

Regards
Colin