Решение: добавим метаполе при создании и редактировании элемента таксономии (категории).
1. В файл function.php вставляем:
//h1 для рубрик
$taxname = 'category'; //сработает для категорий.
add_action("{$taxname}_add_form_fields", 'add_new_custom_fields');
add_action("{$taxname}_edit_form_fields", 'edit_new_custom_fields');
add_action("create_{$taxname}", 'save_custom_taxonomy_meta');
add_action("edited_{$taxname}", 'save_custom_taxonomy_meta');
function edit_new_custom_fields( $term ) {
?>
<tr class="form-field">
<th scope="row" valign="top"><label>Заголовок H1</label></th>
<td>
<input type="text" name="extra[title]" value="<?php echo esc_attr( get_term_meta( $term->term_id, 'title', 1 ) ) ?>"/><br />
<span class="description">Отдельный заголовок (h1)</span>
</td>
</tr>
<?php
}
function add_new_custom_fields( $taxonomy_slug ){
?>
<div class="form-field">
<label for="tag-title">Заголовок H1</label>
<input name="extra[title]" id="tag-title" type="text" value="" />
<p>Отдельный заголовок (h1)</p>
</div>
<?php
}
function save_custom_taxonomy_meta( $term_id ) {
if ( ! isset($_POST['extra']) ) return;
if ( ! current_user_can('edit_term', $term_id) ) return;
if (
! wp_verify_nonce( $_POST['_wpnonce'], "update-tag_$term_id" ) && // wp_nonce_field( 'update-tag_' . $tag_ID );
! wp_verify_nonce( $_POST['_wpnonce_add-tag'], "add-tag" ) // wp_nonce_field('add-tag', '_wpnonce_add-tag');
) return;
$extra = wp_unslash($_POST['extra']);
foreach( $extra as $key => $val ){
$_key = sanitize_key( $key );
if( $_key !== $key ) wp_die( 'bad key'. esc_html($key) );
if( $_key === 'tag_posts_shortcode_links' )
$val = sanitize_textarea_field( strip_tags($val) );
else
$val = sanitize_text_field( $val );
if( ! $val )
delete_term_meta( $term_id, $_key );
else
update_term_meta( $term_id, $_key, $val );
}
return $term_id;
}
2. Чтобы вывести этот заголовок в рубрике, используем следующий php-код:
<?php
if (!empty(get_queried_object()->term_id)) {
$id = get_queried_object()->term_id;
}
echo '<h1>'.get_term_meta($id , 'title', 1 ).'</h1>';
?>
Где его вывести? Нужно понять в каком файле темы выводится заголовок у рубрики и вместо кода вывода заголовка, вставить этот код.
Например, у меня заголовок рубрик выводится в файле: archive.php и вывод выглядит так:
<h1><?php the_archive_title(); ?></h1>
Я его могу заменить на:
<?php
if (!empty(get_queried_object()->term_id)) {
$id = get_queried_object()->term_id;
}
echo '<h1>'.get_term_meta($id , 'title', 1 ).'</h1>';
?>
Тогда в h1 будет выводится значение поля, которое мы создали.
3. Если хочется вывести дополнительный H1 только, если он заполнен, то выводим с условием:
<?php
if (!empty(get_queried_object()->term_id)) {
$id = get_queried_object()->term_id;
}
if (!empty(get_term_meta($id , 'title', 1 ))) {
echo '<h1>'.get_term_meta($id , 'title', 1 ).'</h1>';
} else {
echo '<h1>'.the_archive_title().'</h1>';
}
?>
Теперь, если наш новый h1 не заполнен, то будет выводится стандартный заголовок (Название).
Редакции сообщения
06.11.2020 13:299SEOПричина: не указано