Heartbeat обновить браузер при обновлении страницы

Я пытаюсь автоматически принудительно обновить браузер на определенной странице, когда страница обновляется в бэкэнде. Я пытаюсь достичь с помощью API Heartbeat.

Я просматриваю все примеры Heartbeat, которые смог найти, но не могу понять всю концепцию этого.

Все, что я могу сделать, это console.log строка каждые 15 секунд на этой конкретной странице.

Что у меня так далеко:

https://pastebin.com/ELQ9uJAw

<?PHP
//embed heartbeat api
function heartbeat_test_enqueue($hook_suffix) {
if ( is_page(1105)) {
// Make sure the JS part of the Heartbeat API is loaded.
wp_enqueue_script('heartbeat');

// Output the test JS in footer.
add_action( 'print_footer_scripts', 'heartbeat_test_js', 20 );

//Add filter to receive hook, and specify we need 2 parameters.
add_filter( 'heartbeat_received', 'dw_receive_heartbeat', 10, 2 );
}

}
add_action( 'wp_enqueue_scripts', 'heartbeat_test_enqueue' );//clientside
function heartbeat_test_js() {
?>
<script>

jQuery(document).ready( function($) {
// Hook into the heartbeat-send
jQuery( document ).on( 'heartbeat-send', function( e, data ) {
//
});

// Listen for the custom event "heartbeat-tick" on $(document). This fire's once every minute that the page is open.
jQuery(document).on( 'heartbeat-tick', function(e, data) {
console.log("tick");
});
});

</script>
<?php
}//change heartbeat interval time
function m_heartbeat_settings( $settings ) {
$settings['interval'] = 15; //only values between 15 and 60 seconds allowed
return $settings;
}
add_filter( 'heartbeat_settings', 'm_heartbeat_settings' );

//heartbeat api end
?>

Я хотел использовать хук «post_updated», чтобы проверить, изменилась ли «post_date». Но я не понимаю, как я могу использовать этот хук в сочетании с Heartbeat API.

Заранее спасибо, я действительно потерян здесь.

0

Решение

Наконец-то нашел способ.

//embed heartbeat api
function heartbeat_test_enqueue($hook_suffix) {
if ( is_page(1105)) {
// Make sure the JS part of the Heartbeat API is loaded.
wp_enqueue_script('heartbeat');

// Output the test JS in admin footer.
add_action( 'print_footer_scripts', 'heartbeat_update', 20 );

//Add filter to receive hook, and specify we need 2 parameters.
add_filter( 'heartbeat_received', 'dw_receive_heartbeat', 10, 2 );

}

}
add_action( 'wp_enqueue_scripts', 'heartbeat_test_enqueue' );

//write timestamp file
function write_timestamp($post_ID, $post_after, $post_before){
if ( $post_ID == 1105 ) {
$myfile = fopen("URLtoTextFile/tv.txt", "w") or die("Unable to open file!");
$txt = $post_after->post_modified;
fwrite($myfile, $txt);
fclose($myfile);
}
}
add_action( 'post_updated', 'write_timestamp', 10, 3 );

//clientside
function heartbeat_update() {
?>
<script>

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

var current_timestamp;

jQuery.ajax({
url: "/tv.txt",
cache: false,
success: function (data){
current_timestamp = data;
}});

// Listen for the custom event "heartbeat-tick" on $(document). This fire's once every 15s that the page is open.
jQuery(document).on( 'heartbeat-tick', function(e, data) {
jQuery.ajax({
url: "/tv.txt",
cache: false,
success: function (data){
if (data != current_timestamp) {
jQuery('body').fadeOut(1000, function(){
location.reload(true);
});
}
}
});
});
});

</script>
<?php
}//change heartbeat interval time
function m_heartbeat_settings( $settings ) {
$settings['interval'] = 15; //only values between 15 and 60 seconds allowed
return $settings;
}
add_filter( 'heartbeat_settings', 'm_heartbeat_settings' );

//heartbeat api end

Что я делаю:

Я записываю дату модификации страницы в файл .txt, и после каждого обновления я подключаюсь к зацепке post_updated и проверяю, изменилась ли дата. а потом я просто обновляю браузер с помощью jQuery.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]