web-dev-qa-db-fra.com

Arrêter/mettre en pause WordPress Heartbeat en utilisant Javascript

J'utilise la pulsation de WordPress pour vérifier un paramètre sur mon serveur à partir du serveur frontal. Si ce paramètre a une valeur spécifique, je souhaite arrêter de déranger le serveur. Là pour je veux arrêter/mettre en pause le battement de coeur. Il n'y a pas d'autre chose en fonction du rythme cardiaque.

J'ai trouvé wp.heartbeat.stop () ici , mais cela ne fonctionne pas.

jQuery(document).ready(function ($) {

    $(document).on('heartbeat-tick', function (e, data) {
        [...]
        if (true == x) {
            wp.heartbeat.stop();
        }
        [...]
    }

});

Je reçois cette erreur dans la console:
TypeError: wp.heartbeat.stop n'est pas une fonction wp.heartbeat.stop ();

Impossible de trouver la fonction stop () dans le fichier heartbeat.js.

Ce code ne génère pas d'erreur, mais ne fonctionne pas trop.

jQuery(document).ready(function ($) {

    $(document).on('heartbeat-tick', function (e, data) {
        [...]
        if (true == x) {
            $(window).trigger('unload.wp-heartbeat');
        }
        [...]
    }

});

Est-ce que je déclenche l'événement unload.wp-heartbeat dans le mauvais sens?

6
Drivingralle

Drivingralle,

Vous êtes sur la bonne piste ici avec votre code.

J'ai effectué quelques travaux dans la console JavaScript et ma conclusion du débogage de heartbeat.min.js temporairement (la source provient de heartbeat.js) est que settings.suspend est correctement déclenché sur l'événement 'unload.wp-heartbeat'. Cependant, j'estime qu'il est anormal que la fonction focused() redéfinisse settings.suspend sur false lorsque la page est active.

Vous pouvez soumettre un bogue indiquant que la variable settings.suspend est annulée par inadvertance dans la fonction focused() après le déclenchement de l'événement unload.wp-heartbeat et/ou vous pouvez modifier le code heartbeat.(min).js en conséquence, en incluant éventuellement une nouvelle variable personnalisée settings.permanentlySuspend qui est ensuite cochée. avec settings.suspend dans la fonction scheduleNextTick().

J'espère que cela pourra aider,

Ryan

1
ryanm

Hey, je cherchais aussi la même solution.

Donc, j'ai cette application de chat et j'utilise un type d'activité de vote utilisant heatbeat maintenant si, lorsque le chat se ferme, je ne veux pas de trafic sur mon site, ce qui est inutile, donc je veux désactiver le battement de coeur, mais malheureusement, wordpress ne permet pas de le désactiver, Je vois que c'était une raison de sécurité, il y avait cette fonction d'arrêt avant, mais ils ont enlevé.

Nous avons l'option de paramétrage dans wp.heartbeat où la variable de suspension est stockée mais qui n'est pas accessible. Ce sont les méthodes accessibles en utilisant wp.heartbeat.

connectNow: r()
dequeue: w(a)
disableSuspend: s()
enqueue: u(a,b,c)
getQueuedItem: x(a)
hasConnectionError: q()
hasFocus: p()
interval: t(a,b)
isQueued: v(a)

je ne peux donc que ralentir les appels ajax avec wp.heartbeat.interval( 120 );, où 120 correspond au temps maximum que nous pouvons définir, ce qui correspond à environ 2 minutes.

0
Spock