ВойтиРегистрация
Список форумов Сайтостроение CMS, скрипты, плагины Wordpress Как у категории сделать дополнительное поле для ввода H1?

Как у категории сделать дополнительное поле для ввода H1?

2 ответ(ов) в теме
Валера
не в сети 11 месяцев
На сайте с 21.11.2019
Участник
Ученик
30%
Тем 1
Сообщения 1
1
13:12

Задача: в Wordpress при редактировании категории выводить поле, в которое можно ввести текст. И этот текст потом будет выводится заголовком H1.

Зачем мне это? По умолчанию заголовок берется из названия рубрики. К примеру, у меня структура рубрик такая: "Одежда" - "Женщинам". Я хочу в рубрике Женщинам вывести заголовок "Модная одежда для женщин". Но если я редактирую название, то оно выводится еще и в хлебных крошках.

То есть в хлебных крошках получается длинно и не нужно: "Современная одежда из Италии" - "Модная одежда для женщин". Поэтому названия я делаю короткие (однословные), для меню и для хлебных крошек.

Подскажите, как добавить подобное поле к рубрикам в админке? Желательно без использования плагина.

Редакции сообщения
06.11.2020 13:14ВалераПричина: не указано
1
9SEO
не в сети 21 час
На сайте с 21.07.2018
Администратор
Основатель MMG
Тем 27
Сообщения 183
2
13:18

Решение: добавим метаполе при создании и редактировании элемента таксономии (категории).

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Причина: не указано
0
Вы не имеете права на публикацию сообщений в этой теме
Авторизация
*
*
Авторизуясь, Вы принимаете оферту и политику конфиденциальности
Регистрация
*
*
*
Регистрируясь, Вы принимаете оферту и политику конфиденциальности
Генерация пароля