Как скрыть <h2>, если появляется <h1>

Я работаю над сайтом WordPress, который автоматически отображает h2 на странице, как название страницы / сообщения. Я хочу вручную создать h1 для некоторых страниц и скрыть h2 , если появится h1 .

Есть ли способ сделать это?

Solutions Collecting From Web of "Как скрыть <h2>, если появляется <h1>"

Есть два способа сделать это, хотя один, возможно, лучше другого.

Использовать JavaScript (работает, но не оптимально)

Первый способ сделать это – использовать JavaScript. Я не поклонник использования этого подхода, потому что для выполнения переключения требуется веб-браузер. Это отрицательно влияет на SEO, потому что, для поисковых систем, элемент все еще существует в документе.

Тем не менее, если вы выберете этот подход, вот как вы можете это сделать …

Предполагая, что ваша страница настроена примерно так:

 <h1><?php the_title(); ?></h1> <h2>Some other text.</h2> 

Тогда ваш JavaScript-jQuery-based (поскольку WordPress использует jQuery) будет выглядеть так:

 if($('h1').is(':visible')) { $('h2').hide(); } // end if 

Вы можете сделать этот код немного понятнее, указав идентификаторы или имена классов в своих элементах заголовка. Например, предположим, что у вас есть элементы заголовка, названные таковыми:

 <h1 id="title"><?php the_title(); ?></h1> <h2 id="alt-title">This is a second title.</h2> 

Тогда ваш JavaScript может выглядеть так:

 if($('#title').is(':visible')) { $('#alt-title').hide(); } // end if 

Сделайте это на стороне сервера

Лучший способ сделать это – установить его в файле шаблона на стороне сервера.

Скажем, например, вы хотите показать h1 только на отдельных сообщениях или страницах, но h2 на страницах архива или страницах листинга. Вы сделали бы это так:

 <?php if(is_page() || is_single()) { ?> <h1><?php the_title(); ?></h1> <?php } else { ?> <h2><?php the_title(); ?></h2> <?php } // end if/else ?> 

Это лучше, потому что обработка происходит на стороне сервера, так что документ, обслуживаемый запрашивающим агентом (то есть поисковой системой или веб-браузером), будет видеть только один элемент.

Я делаю это в файле header.php:

 <?php $tag = ( is_front_page() ) ? 'h1' : 'h2'; echo '<' . $tag . ' id="branding">'; ?> </<?php echo $tag; ?>><!-- #branding -->