WordPress: Outputting shortcode with Javascript?

<script language=”javascript”>
if (country_code==’US’)
{
document.write("[adrotate banner="1"]");
}
else
{
document.write("[adrotate banner="2"]");
}
</script>

[adrotate banner="x"] are wordpress shortcodes used for the Adrotate plugin

This script doesen’t work because somehow outputting [adrotate banner="x"] is not possible?
It uses the globally saved variable country_code.

Read More

I’ve tried with both " and ' (and the inner using one of them and the outer the other), but with no luck.

Any way to work around this and still use JS?

Related posts

Leave a Reply

2 comments

  1. Shortcodes only work server side. If you want to work around it, you can submit the value using AJAX, call do_shortcode() on it in your PHP, return the results as JSON, and then write to the page.

    http://codex.wordpress.org/Function_Reference/do_shortcode

    As a side note, your example has a syntax error because you have double quotes inside your string, since it won’t process as a shortcode. You either need to escape it or use single quotes.

  2. Try to use ` backtick (Template literals) https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals?retiredLocale=it

    <script language=”javascript”>
    var option1 = `[adrotate banner="1"]`;
    var option2 = `[adrotate banner="2"]`;
    
    if (country_code=='US') {
        document.write(option1);
    } else {
        document.write(option2);
    }
    </script>
    
    

    also work with php code (workaround for single and double quote) :

    <script language=”javascript”>
    var option1 = `<?php echo do_shortcode('[adrotate banner="1"]'); ?>`;
    var option2 = `<?php echo do_shortcode('[adrotate banner="2"]'); ?>`;
    
    if (country_code=='US') {
        document.write(option1);
    } else {
        document.write(option2);
    }
    </script>