Heartbeat 주기 설정하기

Heartbeat Control 같은 플러그인이 있지만, 굳이 플러그인까지 쓸 필요 없다. 간단한 몇 줄의 코드로 주기 설정이 가능하다.

우선, heartbeat가 어떻게 동작하는지 간단하게 설명한다. heartbeat는 특정 관리자 페이지 접속시 브라우저와 주기적으로 통신한다. 이 주기는 자바스크립트의 setTimeout() 함수로 구현되며, 기본값은 관리자 페이지에 포커스가 있을 때 15초, 해당 페이지에서 포커스를 잃었을 때 120초로 설정된다. 이 120초는 하드코딩되어 있어 값을 변경하기 어렵지만 포커스가 있을 때 15초는 비교적 손쉽게 변경 가능하다.

우선 heartbeat을 완전히 없애는 방법이다. 그다지 추천하지는 않지만 개발환경에는 그럭저럭 고려해 볼만할 것이다.

add_action( 'admin_init', function () {
	if ( wp_script_is( 'heartbeat', 'registered' ) ) {
		wp_deregister_script( 'heartbeat' );
	}
} );

heartbeat을 변경하되, 주기를 설정하려면 다음처럼 하면 된다.

add_action( 'admin_init', function () {
	// 5, 10, 15, 30, 60, 120, 'long-polling'
	$script = "jQuery(document).ready(function () {wp.heartbeat.interval(20)});";
	wp_add_inline_script( 'post', $script );
	wp_add_inline_script( 'inline-edit-post', $script );
	add_action( 'customize_controls_enqueue_scripts', function () use ( $script ) {
		wp_add_inline_script( 'heartbeat', $script );
	} );
}, 100 );

add_filter( 'heartbeat_settings', function ( $settings ) {
	$settings['interval'] = 20;
	return $settings;
} );

wp.heartbeat.interval(20) 부분과 $settings['interval'] = 20; 부분의 20은 heartbeat의 주기를 20초로 설정하라는 부분이다. 적절히 변경해서 사용하면 될 것이다. 당연히 이게 불편하면 플러그인으로 대체해도 무방하다.