Or, embed this snippet using GenerateWP WordPress Plugin.

Download

Clone

schedule_event_disable_comment_old_post

// 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' );