Вопрос: Как использовать один header на всем проекте?

Лучший ответ:
У меня в проектах классы собираются следующим образом, сделано по аналогии с функциями body_class() и post_class()

if ( ! function_exists( 'get_wpgen_header_classes' ) ) {

	/**
	 * Get classes for header container.
	 *
	 * @param string $class Additional header classes.
	 *
	 * @return array
	 */
	function get_wpgen_header_classes( $class = '' ) {

		// Add elements to array.
		$classes   = array();
		$classes[] = 'header';

		if ( has_custom_header() ) {
			$classes[] = 'header--background-image';
		}

		if ( is_front_page() || is_home() ) {
			$classes[] = 'header-bg';
		} else {
			$classes[] = 'custom-class';
		}

		// Check the function has accepted any classes.
		if ( isset( $class ) && ! empty( $class ) ) {
			if ( is_array( $class ) ) {
				$classes = array_merge( $classes, $class );
			} elseif ( is_string( $class ) ) {
				$classes = array_merge( $classes, explode( ' ', $class ) );
			}
		}

		$classes = apply_filters( 'get_wpgen_header_classes', $classes );

		// Usage:
		/*add_filter( 'get_wpgen_header_classes', 'my_header_classes' );
		if ( ! function_exists( 'my_header_classes' ) ) {
			function my_header_classes( $classes ) {
				$classes[] = 'my-class';
				return array_unique( $classes );
			}
		}*/

		return array_unique( (array) $classes );
	}
}

if ( ! function_exists( 'wpgen_header_classes' ) ) {

	/**
	 * Display classes for header container.
	 *
	 * @param string $class Additional header classes.
	 * @param bool   $echo  Echo or return header classes.
	 *
	 * @return string
	 */
	function wpgen_header_classes( $class = '', $echo = true ) {

		$classes = get_wpgen_header_classes( $class );

		if ( $echo ) {
			echo 'class="' . esc_attr( implode( ' ', $classes ) ) . '"';
		} else {
			return 'class="' . esc_attr( implode( ' ', $classes ) ) . '"';
		}
	}
}

Ваше условие я дописал в функцию, осталось дописать логику для ваших оставшихся 4 разных header-ов. В шаблоне функция используется так:

<header id="header" <?php wpgen_header_classes(); ?>>

Так же в функцию можно передавать классы строкой или массивом

<header id="header" <?php wpgen_header_classes( 'new-class' ); ?>>

Худший ответ:
По сути на вопрос, который Вы задали, сами и ответили. Решение данной задачи заключается в правильной выборке. А вот, чтобы помочь Вам нет никаких данных. В чем проблема-то? Для Вас проблема написать более сложный тернарник (можно использовать обычный if else с определением переменной, которая будет нести в себе определенный класс)? Или Вы не знаете как проверить что-либо кроме главной? И вообще ... 

а как сделать для определенной страницы свои стили для header

что за страницы? можно ведь и просто по id присваивать стили или по шаблону (is_page_template()) или is_single(), или is_singular() ( is_single() + is_page() + is_attachment() ).....

есть масса возможностей для проверки, но Вы не поделились в этом направлении никакой инфой

вот Вам пример тернарника из черновиков по извращаться
global $post;
if(!is_home()&&!is_404()&&!is_search()&&isset($post->ID)){$VAB_SEOA=get_post_meta($post->ID,'VAB_SEO',true);}

$SEO_title=isset($VAB_SEOA['SEO_title'])?$VAB_SEOA['SEO_title']:(get_the_title()&&!is_home()&&!is_front_page()&&!is_archive()&&!is_search()?get_the_title()/*.' | '.get_bloginfo('name')*/:(is_home()||is_front_page()?get_bloginfo('name').' | '.get_bloginfo('description'):(is_404()?'404 - '.esc_html__('страница не существует','VAB'):(is_search()?esc_html__('Результаты поиска','VAB').': '.get_search_query():(is_archive()?(is_day()?esc_html__('Архив по дням','VAB').': '.get_the_date():(is_month()?esc_html__('Архив по месяцам','VAB').': '.get_the_date('F Y'):(is_year()?esc_html__('Архив по годам','VAB').': '.get_the_date('Y'):(is_category()?esc_html__('Категория архива','VAB').': '.single_cat_title('',false):(is_tag()?esc_html__('Архив по меткам','VAB').': '.single_tag_title('',false):(has_post_format()?esc_html__('Архив по формату','VAB').': '.single_tag_title('',false).'/'.get_post_format():(is_author()?esc_html__('Архив Автора','VAB').': '.get_the_author_meta('display_name',get_user_by('id',get_query_var('author'))->ID):esc_html__('Архив блога','VAB')))))))):get_bloginfo('name').' | '.get_bloginfo('description'))))));


гуглите нужную выборку
например проверить какой шаблон подключен wordpress (получите is_page_template() или  get_page_template_slug( get_the_ID() ... )

и так далее пока не получите, что нужно)))