• Hi,

    qTranslate is based on shortcodes to differentiate between the languages.
    The only places I found this need in Polylang is in theme options strings.
    Right now I need it for Craft theme. There are texts in home page and there is no other way to have them per language without changing the theme.

    Anyway, I wrote the shortcode:

    // [polylang lang="en"]English[/polylang][polylang lang="sp"]Spanish[/polylang]
    function polylang_shortcode($atts, $content = null)
    {
    	if (empty($content))
    		return '';
    	extract( shortcode_atts( array('lang' => ''), $atts ) );
    	if (empty($lang))
    		return "<h3>You must specify 'lang' using shortcode: polylang</h3>";
    
    	return ($lang == pll_current_language()) ? $content : '';
    }
    add_shortcode('polylang', 'polylang_shortcode');

    enjoy,
    Ronny

    https://wordpress.org/plugins/polylang/

Viewing 15 replies - 1 through 15 (of 18 total)
  • Plugin Author Chouby

    (@chouby)

    Polylang provides the same feature (translating options) in different ways. You can either use the pll_register_string / pll__ API function, or the wpml-config.xml file (that’s normally for WPML, but Polylang can read it).

    My idea is to avoid shortcodes because it’s ugly when the plugin is de-activated.

    Thread Starter Ronny Sherer

    (@ronshe)

    Thanks Chouby,

    Good practice using purchased theme is to create a child theme and make all your changes there. Which means that you do not change the base theme.
    Therefore PHP functions cannot be used.

    The wpml-config.xml on the other hand is a great solution for 99.9% of the cases.
    Petty for me, my client’s theme is one of those 0.1%. It is not storing each option in the database, but combine all options to one string.

    With this theme, I still cannot see a better solution than the ugly shortcode.

    Ronny

    Plugin Author Chouby

    (@chouby)

    In that case wpml-config.xml can’t work but I don’t understand why php code should not work. How your theme does retrieve its options?

    Thread Starter Ronny Sherer

    (@ronshe)

    Of course that PHP will work, but I do not want to change the purchased theme. If I will, my client will not be able to update it.

    Plugin Author Chouby

    (@chouby)

    I did not meant hacking the theme. It is generally possible to use available filters.

    Hi,
    Nice solution ronshe but I’m new in this multilingual functions so could you please explain where to add this shortcode script you wrote so I can use the shortcodes later?

    Thank you.

    Thread Starter Ronny Sherer

    (@ronshe)

    Hi mirilailai,

    Look at Chouby’s answers.
    The need in the shortcode is not recommended and very rarely needed.
    Be sure that you MUST use it.

    Ronny

    Yeah I did but it looks very complicated. I have no idea how to pull these strings. I’m trying to translate a theme custom field which is in the Theme Options.

    If my theme is called “spa” and the theme field is called Intro Content, how should I register the string?

    Thread Starter Ronny Sherer

    (@ronshe)

    Can the fields accept shortcodes?

    I think they can

    Thread Starter Ronny Sherer

    (@ronshe)

    So put my code in functions.php
    Use the shortcode like this:
    [polylang lang=”en”]English[/polylang][polylang lang=”sp”]Spanish[/polylang]

    I add `function polylang_shortcode($atts, $content = null)
    {
    if (empty($content))
    return ”;
    extract( shortcode_atts( array(‘lang’ => ”), $atts ) );
    if (empty($lang))
    return “<h3>You must specify ‘lang’ using shortcode: polylang</h3>”;

    return ($lang == pll_current_language()) ? $content : ”;
    }
    add_shortcode(‘polylang’, ‘polylang_shortcode’);`

    and it pulls me an error: Fatal error: Cannot redeclare polylang_shortcode() (previously declared in /home/meliaspa/www/www/wp-content/plugins/polylang/polylang.php:33) in /home/meliaspa/www/www/wp-content/themes/spa/functions.php on line 11 when I save..

    Thread Starter Ronny Sherer

    (@ronshe)

    You have the function twice. That’s why it tells you Cannot redeclare

    So I have the function already but when I use the shortcodes it doesn’t work..So does that mean the custom field doesn’t support shortcodes and I should try the strings option?

Viewing 15 replies - 1 through 15 (of 18 total)
  • The topic ‘Polylang shortcode (like qTranslate) for theme options and text’ is closed to new replies.