skip to Main Content

I’m altering a plugin on developer recommendations (See latest post), which advices to write a bit of Javascript in the functions.php of WordPress.

Now, when I did that my whole wordpress went blank. Well, after a bit of thinking.. “You can’t write plain Javascript inside of PHP”..

So I wrote them inside a <script> tag, and that inside of a echo ", "; tags. Now.. I’m unsure of the function working (have not tested that yet), but WordPress is showing again, but.. I’m getting the message

Notice: Undefined variable: group in /home/appelhulp/domains/appelhulp.nl/public_html/wp-content/themes/Divi/functions.php on line 8
Notice: Undefined variable: option in /home/appelhulp/domains/appelhulp.nl/public_html/wp-content/themes/Divi/functions.php on line 9
Notice: Undefined variable: option in /home/appelhulp/domains/appelhulp.nl/public_html/wp-content/themes/Divi/functions.php on line 25

And this is the code file
enter image description here

So my question:
What is the problem and how do I make those messages disappear?

The correct answer

Although I accepted @Burak’s answer, this is only half of the correct answer. Please also see @RahilWazir’s part, which half of his/her answer belongs to the solution. As Burak came with the correct script, RahilWazir came with the suggestion to place it in the footer.php instead of functions.php. And placing it there, did the trick. In functions.php didn’t let me achieve what I was seeking. Therefor, thanks both!

4

Answers


  1. When you use double quotes "" to define JS string, PHP will interpret $group as a variable. In order to fix it, you need to use single quotes '' instead.

    Login or Signup to reply.
  2. As you are using double quotes, PHP will think that the variable with $ signs as a php variable. You need to either change them to single quote and rearrange the code either you need to take a look at heredoc which is suitable for situations like this.

    echo <<<'EOT'
    <script>
    ( function() {
        var categories = {};
        var $group = jQuery();
        jQuery('select.app_select_services option').remove().each(function() {
            var $option = jQuery(this),
                contents = $option.text().split(' - '),
                group = jQuery.trim(contents[1]);
    
            if (!categories.hasOwnProperty(group)) {
                var optGroup = jQuery('<optgroup />', { label: group });
                optGroup.appendTo('select.app_select_services');
                categories[group] = optGroup;
            }
    
            categories[group].append(jQuery('<option />', {
                text: jQuery.trim(contents[0]),
                value: jQuery(this).val()
            }));
        });
    } )();
    </script>
    EOT;
    
    Login or Signup to reply.
  3. there is a better and standard way in wordpress

    <?php
    function add_js_functions(){
    ?>
    <script>
    // your js functions here 
    </script>
    <?php
    }
    add_action('wp_head','add_js_functions');
    
    Login or Signup to reply.
  4. You need to wait for DOM to be fully initialized. So wrap your jQuery snippet within ready handler. Or even better place is to place this snippet in your footer.php file before closing </body> tag.

    jQuery(document).ready(function($) { // <-- wrap it
        var categories = {};
        var $group = jQuery();
        jQuery('select.app_select_services option').remove().each(function() {
            var $option = jQuery(this),
                contents = $option.text().split(' - '),
                group = jQuery.trim(contents[1]);
    
            if (!categories.hasOwnProperty(group)) {
                var optGroup = jQuery('<optgroup />', { label: group });
                optGroup.appendTo('select.app_select_services');
                categories[group] = optGroup;
            }
    
            categories[group].append(jQuery('<option />', {
                text: jQuery.trim(contents[0]),
                value: jQuery(this).val()
            }));
        });
    });
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search