protected function render_opening_template_wrappers( $counter = 0 ) {

		// Outer wrapper tag with filters for overriding both globally, per module and per module instance.
		$this->outer_wrapper_tag = apply_filters( 'hogan/module/outer_wrapper_tag', $this->outer_wrapper_tag, $this );

		// Inner wrapper tag with filters for overriding both globally, per module and per module instance.
		$this->inner_wrapper_tag = apply_filters( 'hogan/module/inner_wrapper_tag', $this->inner_wrapper_tag, $this );

		// Echo opening outer wrapper.
		if ( ! empty( $this->outer_wrapper_tag ) ) {
			// Outer wrapper classes with filters for overriding both globally, per module and per module instance.
			$outer_wrapper_default_classnames = [
				'hogan-module',
				'hogan-module-' . $this->name,
				'hogan-module-' . $counter,
			];

			$outer_wrapper_classnames = hogan_classnames(
				apply_filters( 'hogan/module/outer_wrapper_classes', array_merge( $outer_wrapper_default_classnames, $this->outer_wrapper_classnames ), $this )
			);

			$outer_wrapper_attributes = apply_filters( 'hogan/module/outer_wrapper_attributes', [], $this );

			printf(
				'<%s id="%s" class="%s"%s>',
				esc_attr( $this->outer_wrapper_tag ),
				esc_attr( 'module-' . $counter ),
				esc_attr( $outer_wrapper_classnames ),
				hogan_attributes( $outer_wrapper_attributes )
			);
		}

		// Echo inner wrapper.
		if ( ! empty( $this->inner_wrapper_tag ) ) {
			// Inner wrapper classes with filters for overriding both globally, per module and per module instance.
			$inner_wrapper_classnames = hogan_classnames(
				apply_filters( 'hogan/module/inner_wrapper_classes', array_merge( [ 'hogan-module-inner' ], $this->inner_wrapper_classnames ), $this )
			);

			$inner_wrapper_attributes = apply_filters( 'hogan/module/inner_wrapper_attributes', [], $this );

			printf(
				'<%s class="%s"%s>',
				esc_attr( $this->inner_wrapper_tag ),
				esc_attr( $inner_wrapper_classnames ),
				hogan_attributes( $inner_wrapper_attributes )
			);
		}
	}