Or, embed this snippet using GenerateWP WordPress Plugin.

Download

Clone

Disable commenting on old posts

Source: http://www.developerdrive.com/2013/06/using-wp_cron-to-disable-commenting-on-old-posts/

// Scheduled Action Hook
function disable_old_posts_comments_action_hook( ) {
	global $wpdb;
	$days_to_close     = 31; // disable comments and ping backs on posts older than 31 days
	$competition_posts = 10; // mark competition posts as private after 10 days
	
	$wpdb->query(
		$wpdb->prepare(
			"UPDATE $wpdb->posts SET `comment_status` = %s, `ping_status` = %s WHERE `post_date_gmt` < DATE_SUB(%s, INTERVAL %d DAY);",
			array( 'closed', 'closed', current_time( 'mysql', 1 ), $days_to_close )
		)
	);
	
	$wpdb->query(
		$wpdb->prepare(
			"UPDATE $wpdb->posts SET `post_status` = %s WHERE `post_type` = %s AND `post_date_gmt` < DATE_SUB(%s, INTERVAL %d DAY);",
			array( 'private', 'competition', current_time( 'mysql', 1 ), $competition_posts )
		)
	);
}

// Schedule Cron Job Event
function disable_old_posts_comments_cron_job() {
	if ( ! wp_next_scheduled( 'disable_old_posts_comments_action_hook' ) ) {
		wp_schedule_event( current_time( 'timestamp' ), 'daily', 'disable_old_posts_comments_action_hook' );
	}
}
add_action( 'wp', 'disable_old_posts_comments_cron_job' );