Fix jQuery and WordPress “url.indexOf is not a function” error

So, you have updated your WordPress to 5.6 and something strange happened to your website? You open the inspector (Command+Option+C (Mac) or Control+Shift+C (Windows, Linux, Chrome OS), and you find a red message like url.indexOf is not a function error ? Wtf Javascript? How to fix it?

WordPress 5.6 comes with an updated jQuery version: 3.5.1.

WordPress 5.5 stopped enabling the jQuery Migrate helper script by default, and with the upcoming release of WordPress 5.6, the bundled version of jQuery will be upgraded (from 1.12.4-wp to 3.5.1).

What this involves for users, is that any plugin or theme that previously relied on the jQuery Migrate tool to work as expected (due to being older code, or just a missed update to deprecated functions), may now have unexpected behaviors.

make.wordpress.org

.load, .unload, and .error, deprecated since jQuery 1.8, are no more. Use .on() to register listeners.

jQuery blog

So the correct way is to change in your javascript all your occurrences of

$(window).load(function() { ... });

into something like

$(window).on('load', function() { ... });

But sometimes errors are not related to your own code, right? So what to do?
Try adding this code before other javascript scripts and after jQuery inclusion.

jQuery.fn.load = function(callback){ jQuery(window).on("load", callback) };

Reload web page and beep

Sometimes you need, without any plugins, to periodically reload a web page and get notified by something like an acoustic signal.

You can use this simple script (copy and paste in the inspector console or use Sources – > Snippets to save and reuse it)

const reloadMinutes = 15

function beep() {
    var snd = new Audio("data:audio/wav;base64,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qJrx4KOQjahZxWbcZgztj2c49nKmkId44S71j0c8eV9yDK6uPRzx5X18eDvjvQ6yKo9ZSS6l//8elePK/Lf//IInrOF/FvDoADYAGBMGb7FtErm5MXMlmPAJQVgWta7Zx2go+8xJ0UiCb8LHHdftWyLJE0QIAIsI+UbXu67dZMjmgDGCGl1H+vpF4NSDckSIkk7Vd+sxEhBQMRU8j/12UIRhzSaUdQ+rQU5kGeFxm+hb1oh6pWWmv3uvmReDl0UnvtapVaIzo1jZbf/pD6ElLqSX+rUmOQNpJFa/r+sa4e/pBlAABoAAAAA3CUgShLdGIxsY7AUABPRrgCABdDuQ5GC7DqPQCgbbJUAoRSUj+NIEig0YfyWUho1VBBBA//uQZB4ABZx5zfMakeAAAAmwAAAAF5F3P0w9GtAAACfAAAAAwLhMDmAYWMgVEG1U0FIGCBgXBXAtfMH10000EEEEEECUBYln03TTTdNBDZopopYvrTTdNa325mImNg3TTPV9q3pmY0xoO6bv3r00y+IDGid/9aaaZTGMuj9mpu9Mpio1dXrr5HERTZSmqU36A3CumzN/9Robv/Xx4v9ijkSRSNLQhAWumap82WRSBUqXStV/YcS+XVLnSS+WLDroqArFkMEsAS+eWmrUzrO0oEmE40RlMZ5+ODIkAyKAGUwZ3mVKmcamcJnMW26MRPgUw6j+LkhyHGVGYjSUUKNpuJUQoOIAyDvEyG8S5yfK6dhZc0Tx1KI/gviKL6qvvFs1+bWtaz58uUNnryq6kt5RzOCkPWlVqVX2a/EEBUdU1KrXLf40GoiiFXK///qpoiDXrOgqDR38JB0bw7SoL+ZB9o1RCkQjQ2CBYZKd/+VJxZRRZlqSkKiws0WFxUyCwsKiMy7hUVFhIaCrNQsKkTIsLivwKKigsj8XYlwt/WKi2N4d//uQRCSAAjURNIHpMZBGYiaQPSYyAAABLAAAAAAAACWAAAAApUF/Mg+0aohSIRobBAsMlO//Kk4soosy1JSFRYWaLC4qZBYWFRGZdwqKiwkNBVmoWFSJkWFxX4FFRQWR+LsS4W/rFRb/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////VEFHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAU291bmRib3kuZGUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMjAwNGh0dHA6Ly93d3cuc291bmRib3kuZGUAAAAAAAAAACU=");  
    snd.play();
}

document.getElementsByTagName("body")[0].innerHTML = 
`<iframe id="testFrame" 
        src="${window.location.toString()}" 
      style="position: absolute; top:0; left:0; right:0; bottom:0; width:100%; height:100%;">
</iframe>`;
reloadTimer = setInterval(
    function(){ 
        document.getElementById("testFrame").src=document.getElementById("testFrame").src
        beep()
    },
    reloadMinutes * 60000 || 900000
)

Use reloadMinutes to set the reload time.

P.S. Some web sites have protections to avoid to be embedded in IFRAMEs, watch out.

#COVID-19: Davide e Golia, S1-1

nCoV - Corona Virus - COVID-19

Piccolo un centesimo di globulo rosso, invisibile, sospeso tra vita e morte secondo qualche definizione. Eppure così cazzuto.

Semplicemente un virus, il COVID-19

Un coso così minuto in poco tempo è riuscito a:

  • bloccare persone: dal muoversi liberamente, dal incontrarsi, dal abbracciarsi.
  • bloccare mezzi quali aerei, navi, camion, auto (si ok, condotti da persone)
  • sistemare in pochi giorni problemi di smog
  • cambiare il nostro modo di lavorare
  • renderci evidente laddove sta la stupidità di certe persone, pompata di parecchie atmosfere grazie all’ego e all’arroganza di fronte a qualcosa che non si conosce.
  • a volte ucciderci
  • spesso più che altro farci tornare con i piedi per terra ricordandoci che, a caso o meno, quando alla natura girano le serve ben poco per farci mettere in ginocchio con le orecchie basse.

Ed è piccolo, fottutamente piccolo.

CF7: send submitted data to another URL as JSON

Contact Form 7

If you need to send data from a Contact Form 7 (CF7) form to another URL you can use this simple PHP script. Just add it in your WordPress functions.php file inside your theme.

// define the URL where data should be submitted, this constant can be stored in your `wp-config.php` file
define('CF7_TO_API_URL', 'https://...........');
function action_wpcf7_mail_sent( $contact_form ) { 
    // you can limit this script to certains forms, just change the IDs (111,222,333) and uncomment line 10 and 47
    // if (in_array($WPCF7_ContactForm->id(), [111,222,333])) {
        $wpcf7      = WPCF7_ContactForm::get_current();
        $submission = WPCF7_Submission::get_instance();
        if ($submission) {
            $data = $submission->get_posted_data();
            $url = $submission->get_meta( 'url' ); // url where the submit come from
            $postId = url_to_postid($url); // from the url we get the post ID
            $postType = get_post_type($postId); // from post ID we get the post type
            $title = get_the_title($postId); // and the title
            $output = [
                "firstname" => $data['firstname'],
                "lastname" => $data['lastname'],
                "email" => $data['email'],
                "phone" => $data['phone'], // add all needed fields
                "source" => $url,
                "is_product" => $postType === 'product', // ex: we want to know if the page was a product (custom post)
                "product_name" => $postType === 'product' ? $title : '', // if it is a product tell me the product name (title)
                "want_newsletter" => $data['newsletter'] === 1  ||   $data['newsletter'] === "1" // ex. for checkbox    
            ];
            $options = array(
                'http' => array(
                    'method'  => 'POST', // you can change the method (GET, POST)
                    'content' => json_encode( $output ), // php array as json
                    'header'=>  "Content-Type: application/json\r\n" .
                        "Accept: application/json\r\n"
                )
            );
              
            $context  = stream_context_create( $options );
            $result = file_get_contents( CF7_TO_API_URL, false, $context );
            $response = json_decode( $result ); // you can use/output the response from 
        }
    // }
}; 
         
// add the action 
add_action( 'wpcf7_mail_sent', 'action_wpcf7_mail_sent', 10, 1 );