web-dev-qa-db-ja.com

Javascriptを使用してWordPressハートビートを停止/一時停止する

私はフロントエンドから私のサーバーの設定をチェックするのにWordPressのハートビートを使います。その設定に特定の値がある場合は、サーバーの邪魔にならないようにします。ハートビートを停止/一時停止したいのですが。ハートビートに応じて他のものはありません。

wp.heartbeat.stop() こっちに が見つかりましたが、うまくいきません。

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

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

});

このエラーはコンソールに表示されます。
TypeError:wp.heartbeat.stopは関数ではありませんwp.heartbeat.stop();

Heartbeat.jsファイルにstop()関数が見つかりません。

このコードはエラーにはなりませんが、動作しません。

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

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

});

unload.wp-heartbeat イベントを間違った方法でトリガーしますか?

6
Drivingralle

ドライビングパラレル、

あなたはここにあなたのコードで正しい道を進んでいます。

私はJavaScriptコンソールで作業をしましたが、一時的にheartbeat.min.jsをデバッグすること(ソースはheartbeat.jsから来ました)からの結論は、settings.suspend - 'unload.wp-heartbeat'イベントで正しくトリガーされるということです。しかし、focused()関数がsettings.suspendをfalseに戻すのは、ページがフォーカスされているときはいつでもバグだと思います。

unload.wp-heartbeatイベントがトリガーされた後、settings.suspend変数がfocused()関数で誤って元に戻されたことを示すバグを送信したり、それに応じてheartbeat.(min).jsコードを変更したりして、新しいカスタム変数settings.permanentlySuspendをチェックするsettings.suspendで関数scheduleNextTick()を使います。

それが役立つことを願っています、

ライアン

1
ryanm

こんにちは私も同じ解決策を探していました。

だから私はこのチャットアプリケーションを持っていて、チャットが終了したときに自分のサイト上のトラフィックが不要なのでハートビートを無効にしたいと思っています私はそれがセキュリティ上の理由であったと思います、以前にこの停止機能がありました、しかし、彼らは取り除きました。

Suspend変数が格納されているがアクセスできないwp.heartbeatに設定オプションがあります。これらは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)

なので私ができることはwp.heartbeat.interval( 120 );を使ってajaxの呼び出しを遅くすることだけです。ここで120は最大時間を設定できるもので、約2分です。

0
Spock