Автор: admin

Создание текстовых аватарок из названия или имени в WordPress

При разработке одного из наших проектов на WordPress возникла задача — сделать текстовые аватарки по примеру мессенджеров (например, как в Telegram, Slack или Discord).
Идея проста: если у пользователя нет загруженной картинки, система автоматически показывает аватарку с первыми буквами имени или названия, например:

  • Иван ПетровИП
  • Как узнать что у тебя геморройКУ

Такой подход позволяет сохранить аккуратный внешний вид интерфейса и избежать “пустых” мест на сайте, где обычно размещаются фотографии или логотипы.

Зачем нужен этот функционал

Текстовые аватарки особенно полезны:

  • в комментариях WordPress, где не у всех пользователей есть Gravatar;
  • в профилях авторов статей или пользователей сайта;
  • в чатах, форумах и CRM-системах, созданных на базе WordPress;
  • при отображении списков статей, категорий или клиентов, где нужен быстрый визуальный маркер.

Реализация функции

Для решения задачи мы создали универсальную функцию get_first_letters(), которую можно поместить в файл functions.php активной темы WordPress.

// Функция для создания текстовой аватарки из первых букв слов (по примеру мессенджеров)
function get_first_letters($text, $symbols_counter = 2)
{
    $words = explode(' ', $text);
    $initials = '';

    foreach ($words as $word) {
        $initials .= mb_substr($word, 0, 1);
    }

    // Возвращаем первые $symbols_counter букв в верхнем регистре
    return mb_strtoupper(mb_substr($initials, 0, $symbols_counter));
}

Как работает функция

  1. Получаем текст — это может быть имя пользователя, название поста или любое другое текстовое значение.
  2. Разбиваем строку на слова с помощью explode(' ', $text).
  3. Берём первую букву каждого слова с помощью mb_substr($word, 0, 1).
  4. Соединяем первые буквы и возвращаем только первые $symbols_counter символов (по умолчанию — 2).
  5. Преобразуем в верхний регистр с помощью mb_strtoupper() для красивого отображения.

Примеры использования

1. В шаблоне автора или профиля пользователя:

echo get_first_letters(get_the_author_meta('display_name'));

2. В списке постов (например, в карточках статей):

echo get_first_letters(get_the_title());

3. В комментариях:

echo get_first_letters(get_comment_author());

4. Для кастомных данных:

echo get_first_letters('Мой тестовый заголовок', 3); // вернёт: МТЗ

Как сделать визуально “аватарку”

Для красивого вывода можно обернуть результат функции в HTML-контейнер и добавить немного CSS:

<div class="text-avatar">
    <?php echo get_first_letters(get_the_author_meta('display_name')); ?>
</div>

CSS:

.text-avatar {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 48px;
    height: 48px;
    background-color: #4A90E2;
    color: #fff;
    font-weight: bold;
    font-size: 18px;
    border-radius: 50%;
    text-transform: uppercase;
}

В результате вместо изображения пользователь получит аккуратный кружок с буквами — например, ИП, КУ, WP и т.д.

Функция get_first_letters() — это простой, но полезный инструмент, который позволяет:

  • автоматически генерировать текстовые аватарки из имени или названия;
  • использовать их в любом месте WordPress;
  • задавать количество символов и внешний вид под нужды проекта.

Этот приём делает интерфейс чище и современнее, а также улучшает пользовательский опыт в тех случаях, когда изображения недоступны.

Как найти кириллицу в таблице WordPress

Всем привет.

Столкнулись с немного нетривиальной задачей: необходимо было найти в базе данных сайта WordPress все записи с кириллицей.

Для этого вот нашли такое решение:

<?php
// Подключение к WordPress
require_once('wp-load.php'); // путь к вашему wp-load.php

global $wpdb;

// Таблица и поля для проверки
$table = 'таблица';
$fields = ['поле_таблицы', 'еще_одно_поле_если_нужно'];

// Получаем все строки
$rows = $wpdb->get_results("SELECT * FROM $table");
$counter = 0;
foreach ($rows as $row) {
	foreach ($fields as $field) {
		$value = $row->$field;
		// Проверка на кириллицу с игнорированием эмодзи
		// if (preg_match('/[А-Яа-яЁё]/u', $value)) {
		// 	$counter++;
		// 	echo "Строка ID {$row->comment_ID}, поле {$field} содержит кириллицу: " . htmlspecialchars($value) . "<br>";
		// }
		
		$value_unserialize = maybe_unserialize($value);
		if (is_array($value_unserialize)) {
			array_walk_recursive($value_unserialize, function($v) {
				if (is_string($v) && preg_match('/[А-Яа-яЁё]/u', $v)) {
					$counter++;
					echo "Содержит кириллицу: " . htmlspecialchars($v) . "<br>";
				}
			});
		} elseif (is_string($value_unserialize) && preg_match('/[А-Яа-яЁё]/u', $value_unserialize)) {
			$counter++;
			echo "Содержит кириллицу: " . htmlspecialchars($value_unserialize) . "<br>";
		}
	}
}
echo 'Таблица для проверки: '.$table.'<br/>';
echo 'Найдено строк с кириллицей: '.$counter;

Этот метод:

  • Игнорирует эмодзи.
  • Проверяет всю строку или массив.
  • Находит реальную кириллицу, а не случайные байты.

С этим скриптом вы можете перебрать как одно поле таблицы, так и все, которые вам нужны.

Также в конце работы скрипта указывается сколько было найдено записей с кириллицей и какие там данные находятся.

Надеюсь, что пригодится кому-то еще, кроме нас этот скрипт!

Как отцентровать элемент div с помощью css

Сегодня рассмотрим задачу, которая встречается у всех и каждого очень часто: горизонтальное выравнивание элемента/блока по центру с помощью CSS.

В CSS есть несколько способов центрирования div, в зависимости от ситуации. Вот основные:

1. Центрирование по горизонтали (inline-block)

Если div имеет display: inline-block;, можно использовать text-align: center; у родителя:

.parent {
  text-align: center;
}

.child {
  display: inline-block;
}

2. Центрирование по горизонтали (margin auto)

Если div имеет фиксированную ширину, можно использовать margin: auto:

.child {
  width: 200px;
  margin: 0 auto;
}

Вместо строгого width: 200px; можно указывать width: fit-content;

3. Полное центрирование (flexbox)

Самый удобный способ – использовать display: flex; у родителя:

.parent {
  display: flex;
  justify-content: center; /* По горизонтали */
  align-items: center; /* По вертикали */
  height: 100vh; /* Чтобы занять всю высоту экрана */
}

4. Центрирование через Grid

Grid-контейнер позволяет легко центрировать элемент:

.parent {
  display: grid;
  place-items: center;
  height: 100vh;
}

5. Абсолютное центрирование (position absolute)

Если div внутри другого блока, можно использовать position: absolute;:

.parent {
  position: relative;
  height: 100vh;
}

.child {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}

Это те способы, которые довольно просты и тривиальны. Я думаю, что каждый найдет тот, который подходит ему в данном конкретном случае.

Всем удачи и до встречи!

Что такое брейкпоинты для медиа-запросов в CSS?

Брейкпоинты в CSS используются для создания адаптивного дизайна, чтобы стили менялись под определённые размеры экрана или другие условия. В HTML5 конкретных брейкпоинтов нет, но CSS позволяет настроить их под любые нужды проекта.

Популярные брейкпоинты

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

/* Очень маленькие устройства (вертикальные смартфоны, меньше 576px) */
@media (max-width: 575.98px) {
  /* Стили для очень маленьких экранов */
}

/* Маленькие устройства (горизонтальные смартфоны, от 576px и выше) */
@media (min-width: 576px) and (max-width: 767.98px) {
  /* Стили для маленьких экранов */
}

/* Средние устройства (планшеты, от 768px и выше) */
@media (min-width: 768px) and (max-width: 991.98px) {
  /* Стили для планшетов */
}

/* Большие устройства (десктопы, от 992px и выше) */
@media (min-width: 992px) and (max-width: 1199.98px) {
  /* Стили для больших экранов */
}

/* Очень большие устройства (широкие мониторы, от 1200px и выше) */
@media (min-width: 1200px) {
  /* Стили для очень больших экранов */
}

Кастомные брейкпоинты

Если проект требует более точных настроек, например, под какие-то специфичные устройства, вот пример кастомного брейкпоинта:

/* Для маленьких экранов шириной до 400px */
@media (max-width: 400px) {
  /* Стили для супер-компактных экранов */
}

Медиа-запросы по ориентации экрана

Иногда важно знать, держит пользователь устройство вертикально или горизонтально:

/* Вертикальная ориентация экрана */
@media (orientation: portrait) {
  /* Стили для портретного режима */
}

/* Горизонтальная ориентация экрана */
@media (orientation: landscape) {
  /* Стили для альбомного режима */
}

Медиа-запросы по соотношению сторон

Если проект требует дизайна, завязанного на пропорции экрана:

@media (aspect-ratio: 16/9) {
  /* Стили для экранов с соотношением 16:9 */
}

Лайфхаки для использования брейкпоинтов

  1. Mobile-First подход: Пиши стили сначала для маленьких экранов, а потом используй min-width для более крупных.
  2. Относительные единицы: Вместо пикселей используй em или rem — так дизайн будет адаптироваться под настройки пользователя.
  3. Тестируй на реальных устройствах: Разработчики девтулзы — топ, но ничего не заменит тестов на настоящих девайсах.

Как установить http код 410 для страниц на WordPress

У вас есть удаленные страницы на вашем сайте WordPress, и вы не собираетесь перенаправлять или восстанавливать их даже в будущем?

В этом случае вы можете настроить код статуса HTTP 410 на этих страницах. Это поможет пользователям и поисковым системам понять, что страницы удалены навсегда.

Но что делать, если у вас много удаленных страниц? Установка кода 410 вручную для каждой из них может занять целую вечность.

В этой статье базы знаний мы покажем вам быстрый и простой способ установки кода статуса 410 для всего вашего сайта WordPress.

1 Что такое код статуса 410 Gone?

Код статуса 410 Gone — это тип HTTP-ответа, который указывает, что запрошенный ресурс больше не доступен на сервере и не имеет адреса пересылки.

Проще говоря, сервер определил, что запрошенный ресурс навсегда исчез и больше не будет доступен.

Давайте проясним ситуацию. Предположим, у вас есть страница на вашем веб-сайте, и по какой-то причине вы намеренно удаляете ее, не желая перенаправлять или возвращать ее позже. Вот когда вам следует использовать код статуса 410.

Эта ошибка будет отображаться на стороне клиента для пользователей, которые пытаются получить доступ к странице, а не на сервере. С другой стороны, вы сообщаете поисковым системам, что больше никогда не нужно сканировать и индексировать страницу, что означает, что она исчезла навсегда.

Итак, вы можете видеть, что это отличается от типичного кода 404 Not Found, который предполагает, что ресурс может быть временно недоступен или просто никогда не существовал в этом месте.

Какой код ошибки использовать: 404 или 410 на вашем сайте WordPress?

Ну, это зависит от обстоятельств. Мэтт Каттс из Google сказал в одном из видеороликов Google Search Central:

«Если страница исчезла, и вы думаете, что это временно, используйте 404. Если страница исчезла, и вы не знаете другой страницы, которая могла бы ее заменить, вам некуда больше указывать, и вы знаете, что эта страница исчезнет и никогда не вернется, тогда используйте 410».

Использование кода статуса 404 может привести к тому, что поисковые системы, такие как Google, будут ждать до 24 часов, прежде чем удалить страницу из индекса, поскольку они проверяют, намеренно ли вы это сделали.

Однако, если вы используете код статуса 410, вы даете Google сигнал, что вы уверены в своих действиях, и они немедленно удалят страницу из индекса.

Поэтому, прежде чем решить использовать код статуса 410 на своем веб-сайте WordPress, тщательно подумайте, так как он навсегда удаляет страницу из индексов поисковых систем.

Но что, если нужно иметь дело со многими страницами? В следующем разделе мы обсудим, как массово установить для них код статуса 410.

2 шага для массовой установки кода статуса 410 для WordPress

Через файл .htaccess

Если вы используете сервер Apache, можно настроить код ответа 410 через .htaccess:

  1. Откройте файл .htaccess в корневой папке вашего сайта.
  2. Добавьте строки:
Redirect 410 /example-page
Redirect 410 /another-page

Замените example-page на путь к вашей странице.

Через файл functions.php

Вы можете добавить специальный код в файл functions.php вашей темы:

  1. Откройте файл functions.php вашей активной темы (в меню WordPress: Внешний вид → Редактор темы).
  2. Добавьте следующий код:
function set_410_for_pages() {
    // Укажите URL-адреса страниц, для которых нужен код 410
    $pages_to_410 = [
        'example-page', // Путь к странице: example.com/example-page
        'another-page', // example.com/another-page
    ];

    // Получаем текущий URL
    $current_slug = trim(parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH), '/');

    if (in_array($current_slug, $pages_to_410)) {
        // Устанавливаем заголовок 410 и выводим кастомное сообщение
        status_header(410);
        echo '<h1>410 Gone</h1>';
        echo '<p>Эта страница была удалена.</p>';
        exit; // Останавливаем выполнение скрипта
    }
}
add_action('template_redirect', 'set_410_for_pages');

Вывод комментариев в WordPress с ответами

Для того, чтобы вывести все комментарии сайта (а не только для текущей страницы), мы разработали такой код:

<?php $comments = get_comments([
			'status' => 'approve', // Только одобренные комментарии
			'orderby' => 'comment_date_gmt', // Сортировка по дате
			'order' => 'DESC', // Порядок вывода: старые сначала
		]);?>
		<?php 
		// Группируем комментарии по их родителям
		$grouped_comments = group_comments_by_parent($comments);
		
		// Выводим комментарии
		if (!empty($comments)) {
			render_all_comments($comments, $grouped_comments);
		} else {
			echo '<p>' . __('No comments found.') . '</p>';
		}
		?>

// Функция для группировки комментариев по родителю
function group_comments_by_parent($comments) {
	$grouped = array();

	foreach ($comments as $comment) {
		$parent_id = $comment->comment_parent;
		if (!isset($grouped[$parent_id])) {
			$grouped[$parent_id] = array();
		}
		$grouped[$parent_id][] = $comment;
	}

	return $grouped;
}

// Функция для рекурсивного отображения комментариев
function render_all_comments($comments, $grouped, $parent_id = 0, $depth = 0) {
	if (isset($grouped[$parent_id])) {

		foreach ($grouped[$parent_id] as $comment):?>
		<article class="comment <?php if($comment->comment_parent):?>reply<?php endif;?>" id="<?php echo $comment->comment_ID;?>">
			<header class="author-data">
				<?php $date = new DateTime($comment->comment_date);?>
				<address class="author" rel="author"><?php echo $comment->comment_author;?></address>
				<time pubdate datetime="<?php echo $date->format('Y-m-d');?>" title="<?php echo $date->format('F d Y');?>"><?php echo $date->format('h:m:s');?> <span><?php echo $date->format('d.m.Y');?></span></time>
			</header>
			<div class="comment-content"><?php echo $comment->comment_content;?></div>
		</article>
		<?php
			// Рекурсивно отображаем ответы на текущий комментарий
			render_all_comments($comments, $grouped, $comment->comment_ID, $depth + 1);
		?>
		<?php endforeach;?>
	<?php }
}

Получение комментариев

<?php $comments = get_comments([
    'status' => 'approve', 
    'orderby' => 'comment_date_gmt',
    'order' => 'DESC',
]);?>

Функция get_comments получает комментарии:

  • status: только одобренные.
  • orderby: сортируются по дате.
  • order: выводятся в обратном порядке (сначала новые).

Группировка комментариев

$grouped_comments = group_comments_by_parent($comments);

Функция group_comments_by_parent распределяет комментарии по родителям. Это нужно для отображения иерархии (комментарий-ответ).

function group_comments_by_parent($comments) {
    $grouped = array();

    foreach ($comments as $comment) {
        $parent_id = $comment->comment_parent; // ID родительского комментария
        if (!isset($grouped[$parent_id])) {
            $grouped[$parent_id] = array(); // Создаем массив для родителя, если его еще нет
        }
        $grouped[$parent_id][] = $comment; // Добавляем комментарий в группу
    }

    return $grouped;
}

Отображение комментариев

if (!empty($comments)) {
    render_all_comments($comments, $grouped_comments);
} else {
    echo '<p>' . __('No comments found.') . '</p>';
}

Если есть комментарии, вызывается функция render_all_comments для их отображения.

Функция render_all_comments

function render_all_comments($comments, $grouped, $parent_id = 0, $depth = 0) {
    if (isset($grouped[$parent_id])) {
        foreach ($grouped[$parent_id] as $comment):?>
        <article class="comment <?php if($comment->comment_parent):?>reply<?php endif;?>" id="<?php echo $comment->comment_ID;?>">
            <header class="author-data">
                <?php $date = new DateTime($comment->comment_date);?>
                <address class="author" rel="author"><?php echo $comment->comment_author;?></address>
                <time pubdate datetime="<?php echo $date->format('Y-m-d');?>" title="<?php echo $date->format('F d Y');?>"><?php echo $date->format('h:m:s');?> <span><?php echo $date->format('d.m.Y');?></span></time>
            </header>
            <div class="comment-content"><?php echo $comment->comment_content;?></div>
        </article>
        <?php
            render_all_comments($comments, $grouped, $comment->comment_ID, $depth + 1);
        ?>
        <?php endforeach;?>
    <?php }
}

Эта функция:

  1. Рекурсивно отображает комментарии: сначала выводит корневые, затем вложенные.
  2. Выводит данные комментария:
    • Автор: <?php echo $comment->comment_author;?>.
    • Дата и время: <?php $date->format(); ?>.
    • Текст комментария: <?php echo $comment->comment_content;?>.
  3. Рекурсивно вызывает себя для вложенных комментариев, передавая ID текущего комментария как parent_id.

Резюме

  1. Модулярность: Код хорошо структурирован с использованием функций (group_comments_by_parent и render_all_comments).
  2. Поддержка вложенности: Рекурсия позволяет отображать вложенные комментарии.
  3. Адаптируемость: Можно легко изменить структуру и оформление вывода, редактируя render_all_comments.

Этот шаблон подходит для страниц, где нужно отображать отзывы или комментарии с возможностью ответа.

Почему не работает allposition.ru

Сервис Allpositions.ru, широко известный инструмент для отслеживания позиций сайтов в поисковых системах, прекратил свою работу в начале ноября 2024 года. Пользователи начали замечать недоступность ресурса с 2 ноября, и с тех пор доступ к сайту не восстановлен.

Основной причиной прекращения работы сервиса стала внезапная смерть его владельца, Матылькова Евгения Алексеевича. Согласно данным, его индивидуальное предпринимательство было прекращено в связи с его кончиной.

VC.ru

После этого группа энтузиастов предприняла попытки восстановить работу сервиса. Они оплатили хостинг до 12 декабря 2024 года, чтобы сохранить файлы и предотвратить их удаление. Однако доступ к базам данных и другим критически важным ресурсам остается ограниченным, что затрудняет полное восстановление функциональности сервиса.

Search Engines Guru

На данный момент Allpositions.ru остается недоступным, и точные сроки возобновления его работы неизвестны. Пользователям рекомендуется искать альтернативные сервисы для мониторинга позиций сайтов, такие как TopVisor, SerpHunt или Webtronica, которые предлагают схожий функционал.

VC.ru

Ситуация с Allpositions.ru подчеркивает важность планирования преемственности и управления доступом к критически важным ресурсам в бизнесе, чтобы обеспечить непрерывность работы сервисов в непредвиденных обстоятельствах.

От себя же отмечу, что очень жаль, что такой ресурс скорее всего уйдет в нибытие… Был очень хороший и качественный.

Какие есть аналоги AllPositions.ru

Рассмотрим несколько популярных сервисов, которые могут стать достойной заменой AllPositions.ru:

Webtronica.io
Быстрый и удобный сервис мониторинга позиций с прозрачной стоимостью — 4 копейки за сбор одного запроса в одной поисковой системе и регионе. Предоставляет гостевой доступ и возможность импорта истории позиций. Сервис постоянно дорабатывается, учитывая пожелания пользователей.

Serphunt.ru
Инструмент для SEO-специалистов и маркетологов, упрощающий мониторинг позиций. Стоимость проверки позиции — 4 копейки, однако гостевой доступ отсутствует. Предусмотрена функция импорта истории позиций.

Line.pr-cy.ru
Сервис с ценой проверки от 2,5 до 5,5 копеек за позицию. Импорт истории позиций доступен, но гостевой доступ не предусмотрен.

Topvisor.com
Предоставляет проверку позиций по цене от 4,9 до 7 копеек. Имеется гостевой доступ и возможность импорта истории позиций.

Seolib.ru
Стоимость проверки позиции составляет 15–17 копеек. Гостевой доступ предоставляется, однако функция импорта истории позиций отсутствует.

Labrika.ru
Сервис предлагает тарифные планы с ценой проверки от 30 до 39 копеек за позицию. Доступен гостевой доступ и импорт истории позиций.

Seranking.com
Стоимость проверки позиции варьируется от 3,7 до 6,5 копеек. Предоставляется гостевой доступ и возможность импорта истории позиций.

Rush-analytics.ru
Сервис предлагает тарифы с ценой проверки 1 рубль за позицию. Имеется гостевой доступ и функция импорта истории позиций.

Таким образом…

При выборе альтернативы AllPositions.ru рекомендуется учитывать не только стоимость проверки позиций, но и функциональные возможности сервиса, наличие гостевого доступа, поддержку импорта истории позиций и другие параметры, важные для вашей работы. Среди рассмотренных вариантов Webtronica.io выделяется сочетанием низкой стоимости и широкого функционала, что делает его привлекательным выбором для многих специалистов.

Примечание: Цены и условия использования сервисов актуальны на момент публикации статьи и могут изменяться со временем. Рекомендуется уточнять актуальную информацию на официальных сайтах сервисов.

PS: На данный момент восстановлен функционал сайта allpositions.ru частично. Я так понимаю, что ребята продолжают работы по восстановлению и есть вероятность, что сервис обратно оживет.

noindex, nofollow — хак для плагина Yoast SEO

Иногда необходимо закрыть страницы таксономий на сайте WordPress от индексации поисковыми системами. Если вы используете плагин Yoast SEO, он по умолчанию проставляет метатег noindex, follow. Однако, если вы хотите, чтобы на определенных таксономиях использовалось значение noindex, nofollow, можно добавить следующий код в файл functions.php вашей темы:

Пример кода для установки noindex, nofollow:

// добавляем для нужных таксономий noindex
add_filter('wpseo_robots', 'artit_wpseo_robots', 10, 2);
function artit_wpseo_robots($robots_str, $index) {
    if (is_tax()) { // Проверяем, что это таксономическая страница
        $current_taxonomy = get_queried_object(); // Получаем текущий объект таксономии
        
        // Если текущая таксономия относится к temp_taxonomy или another_temp_taxonomy
        if (in_array($current_taxonomy->taxonomy, ['temp_taxonomy', 'another_temp_taxonomy'])) {
            return 'noindex, nofollow'; // Устанавливаем noindex, nofollow
        }
    }
    // Возвращаем значение по умолчанию для всех остальных случаев
    return $robots_str;
}
// добавляем для нужных таксономий noindex

Объяснение кода:

  1. Добавление фильтра wpseo_robots:
    • Функция add_filter('wpseo_robots', 'artit_wpseo_robots', 10, 2); добавляет фильтр для изменения значений robots в мета-тегах Yoast SEO. Этот фильтр будет вызывать функцию artit_wpseo_robots с двумя аргументами: текущей строкой robots и индексом.
  2. Функция artit_wpseo_robots:
    • Функция artit_wpseo_robots($robots_str, $index) обрабатывает значения для мета-тегов robots.
  3. Проверка, является ли текущая страница таксономией:
    • if (is_tax()) проверяет, что текущая страница является страницей таксономии.
  4. Получение текущего объекта таксономии:
    • $current_taxonomy = get_queried_object(); получает информацию об объекте текущей таксономии.
  5. Проверка конкретной таксономии:
    • if (in_array($current_taxonomy->taxonomy, ['temp_taxonomy', 'another_temp_taxonomy'])) проверяет, является ли текущая таксономия одной из указанных (temp_taxonomy или another_temp_taxonomy).
  6. Применение noindex, nofollow:
    • Если текущая таксономия совпадает с указанными, строка robots изменяется на noindex, nofollow, что запрещает индексацию и следование по ссылкам на странице.
  7. Возврат значения по умолчанию:
    • Если условие не выполнено, функция возвращает исходное значение robots, предоставленное Yoast SEO.

Таким образом, с помощью данного кода мы добавляем гибкое управление индексацией и атрибутами robots для конкретных таксономий.

Валидация ввода украинских и русских символов в jQuery

Иногда требуется ограничить ввод символов в текстовое поле так, чтобы пользователь мог вводить только буквы украинского и русского алфавитов. Это может быть полезно, например, для форм с именами и фамилиями, где нежелательны цифры, латинские символы или специальные знаки. Давайте рассмотрим, как с помощью jQuery можно легко реализовать такую валидацию.

Основная идея

С помощью метода .keyup() мы можем отслеживать события, происходящие при каждом нажатии клавиши в целевом поле ввода. Это позволит контролировать и корректировать содержимое поля в реальном времени. Для удаления недопустимых символов мы будем использовать регулярное выражение, которое оставит в поле только буквы кириллицы, включая специфические для украинского и русского алфавитов.

Код валидации

Для реализации валидации создайте следующий скрипт на JavaScript с использованием jQuery:

$("input#billing-first_name, input#billing-last_name").keyup(function() {
    $(this).val($(this).val().replace(/[^а-яА-ЯїЇєЄіІёЁ ]/g, ""));
});

Объяснение работы кода

  1. Выбор полей: В данном примере мы выбираем два поля с идентификаторами billing-first_name и billing-last_name. Это могут быть, например, поля для ввода имени и фамилии в форме.
  2. Отслеживание ввода: Используя метод .keyup(), мы подключаем функцию, которая будет выполняться каждый раз, когда пользователь отпускает клавишу. Это позволяет применять валидацию по мере ввода текста.
  3. Замена символов: Метод .replace() используется для замены всех неподходящих символов на пустую строку. Регулярное выражение /[^а-яА-ЯїЇєЄіІёЁ ]/g определяет:
    • ^ — отрицание, т.е. все символы, не соответствующие выражению;
    • а-яА-Я — русские буквы (и в нижнем, и в верхнем регистре);
    • їЇєЄіІ — буквы, уникальные для украинского языка;
    • ёЁ — буква «ё» в русском алфавите;
    • — пробел (для удобства, если нужно вводить фамилию, состоящую из двух частей).
    Всё, что не попадает под эти символы, будет заменено на пустую строку, т.е. удалено из поля.

Применение и возможные изменения

Такой код можно легко адаптировать для других полей или расширить список символов, если необходимо. Например, если вы хотите, чтобы поля принимали и латинские буквы, можно добавить их в регулярное выражение. Вот пример для кириллицы и латиницы:

$("input#billing-first_name, input#billing-last_name").keyup(function() {
    $(this).val($(this).val().replace(/[^а-яА-ЯїЇєЄіІёЁa-zA-Z ]/g, ""));
});

Преимущества и ограничения метода

Преимущества:

  • Простота и лёгкость внедрения. Несколько строк кода обеспечивают базовую валидацию.
  • Валидация происходит на стороне клиента, что улучшает UX (пользовательский опыт), так как пользователь сразу видит результат.

Ограничения:

  • Клиентская валидация уязвима, так как её можно обойти при отключённом JavaScript. Поэтому, если важна надёжность, следует продублировать валидацию и на сервере.
  • Скрипт работает только при наличии jQuery, поэтому нужно убедиться, что он подключен к проекту.

Заключение

Использование jQuery для валидации полей ввода на основе символов кириллицы — это простой и эффективный способ ограничить ввод только нужными символами. Благодаря регулярным выражениям и событиям jQuery вы можете гибко адаптировать проверку для самых разных форм и языков.

Как добавить robots noindex в WordPress

Привет всем.

Как закрыть сайт на WordPress от индексации?

Сегодня мы закрываем сайт на WordPress от индексации. Расскажем же как это делать…

Первое, что нужно сделать, это зайти в админке вордпресс в меню Settings в подменю Reading и поставить там галочку напротив Discourage search engines from indexing this site

И после нажать Save Changes.

Это пропишет следующее в файле robots.txt

User-agent: *
Disallow:

Однако, это недостаточно. Необходимо еще в сам шаблон темы добавить тег:

<meta name='robots' content='noindex, nofollow' />

Для этого вы можете отредактировать шаблон вашей темы и вставить этот код между открывающимся и закрывающимся тегом head.

Также это можно сделать с помощью кода, прописав его в файле functions.php вашей темы:

add_action( 'wp_head', function() {
echo '<meta name="robots" content="noindex, nofollow" />';
} );

Этот код добавит этот мета тег в тег head вашей темы.

После этого ваш сайт не будет проиндексирован поисковыми системами. Поздравляем! Задача достигнута.