Настройка title для каждой страницы сайта на WordPress без плагинов

Просто добавьте этот код в functions.php вашей темы:

function your_document_title($title) {
  $sep = ' | ';
  $array = [];
  $term = get_queried_object();
 
  global $page;
 
  if (is_singular()) {
    if ($page) {
      array_push($array, 'Часть '.intval($page));
    }
    array_push($array, get_the_title($term));
  }
  else if (is_paged()) {
    array_push($array, 'Страница ' . intval(get_query_var('paged')));
  }
 
 if (is_search()) {
    array_push($array, 'Результат поиска по запросу "'.esc_html($_GET['s'].'"'));
  }
  else if (is_category($term)) {
    array_push($array, 'Категория "' . $term->name . '"');
  }
  else if (is_tag($term)) {
    array_push($array, 'Метка "' . $term->name . '"');
  }
 
  array_push($array, get_bloginfo('name'));
 
  if (is_front_page() && !is_paged()) {
    array_push($array, get_bloginfo('description'));
  }
 
  return implode($sep, $array);
}
add_filter('document_title', 'your_document_title');

Правила такие:

  • для одиночных постов — «Название поста»
  • для страницы категории выводится — Категория «Название»
  • для страницы тега выводится — Метка «Название»
  • для главной страницы «Название сайта | Описание сайта»
  • для постов разбитых на части добавляется «Часть N» в начале
  • для страница поиска типа /s=QUERY «Результат поиска QUERY»
  • для страниц пагинации типа /page/N добавляется «Страница N» в начале
  • для всех страниц добавляется информация из поля Настройки->Общие->Название сайта
  • для всех страниц, кроме главной и страниц пагинаций, в конце добавляется информация из поля «Настройки->Общие->Краткое описание»
Добавляем мета тег canonical к каждой странице сайта на WordPress без плагинов

Всем привет! Чтобы добавить запись типа meta rel="canonical" href="url" к каждой странице вашего сайта на WordPress, добавьте этот код в functions.php вашей темы:

function remove_args($url) {
  $parsed = parse_url($url);
 
  $fragment = '';
 
  if (array_key_exists('fragment', $parsed)) {
    $fragment = '#' . $parsed['fragment'];
  }
 
  return sprintf("%s://%s%s%s",
    $parsed['scheme'],
    $parsed['host'],
    $parsed['path'] ?? '',
    $fragment);
}
 
 
function print_canonical_link() {
  $url = "";
 
  // Одиночная страница
  if (is_single()) {
    global $page;
    // Пост из нескольких частей
    if ($page) {
      $url = get_pagenum_link($page);
    }
    else {
      $url = get_permalink();
    }
  }
  // Страница пагинации типа что-то-там/page/N
  else if (is_paged()) {
    $url = get_pagenum_link(get_query_var('paged'));
  }
  // Главная страница сайта
  else if(is_front_page()) {
    $url = get_home_url();
  }
  // Страницы категории или тега
  else if(is_category() || is_tag()) {
    $url = get_term_link(get_queried_object());
  }
 
  if ($url) {
    echo '<link rel="canonical" href="'.remove_args($url).'" />';
  }
}
add_action('wp_head', 'print_canonical_link');

Подробности для непосвящённых: функция print_canonical_link() выводит запись вида
<meta rel="canonical" href="url" /> во время вызова штатной функции wp_head(), что очень уважают поисковые системы, но это неточно. А функция remove_args() удаляет GET аргументы вида «?key=value» из URL. Критика, замечания, пожелания приветствуются.

Загрузка разных счётчиков с помощью jQuery.getScript()

Всем привет! Буду краток:

counters.js

jQuery(document).ready(function($) {
    $.ajaxSetup({cache : true});
 
    // Данные для Google Analytics
    window.dataLayer = [];
    window.gtag = function() {
        window.dataLayer.push(arguments);
    }
 
    $.getScript(
        'https://www.googletagmanager.com/gtag/js?id=G-41BWRDZLG5',
        function() {
            gtag('js', new Date());
            gtag('config', 'G-41BWRDZLG5');
        }
    );
 
    // Данные для Яндекс.Метрики
    window.ym = function() { (window.ym.a||[]).push(arguments); }
    window.ym.l = 1*new Date();
 
    $.getScript(
        'https://mc.yandex.ru/metrika/tag.js',
        function() {
            ym(91531653, "init", {
                    webvisor:true,
                    trackLinks:true,
                    clickmap:true,
                    accurateTrackBounce:false
                }
            );
        }
    );
 
    // Данные для top.mail.ru
    var _tmr = window._tmr || (window._tmr = []);
    _tmr.push({
        id: "2601331",
        type: "pageView",
        start: (new Date()).getTime()
    });
 
    $.getScript('//top-fwz1.mail.ru/js/code.js');
});


Update (30.09.2023): Поскольку счётчик Яндекс Метрики замедляет сайт в различных тестах, я скачал его локально в папку [wordpress_folder]/metrika и добавил в задачу в crontab для обновления этого файла каждый час, Затем заменил https://mc.yandex.ru/metrika/tag.js в скрипте выше на /metrika/tag.js.
Задача в crontab

@hourly curl -s https://mc.yandex.ru/metrika/tag.js -o [wordpress_folder]/metrika.tag


Источник вдохновения статья Yandex Metrika: Сторонний код заблокировал основной поток.

Не забудьте поменять идентификаторы счётчиков и проверить, что tag.js доступен по адресу [ваш сайт]/metrika/tag.js, если вы решили воспользоваться ускорением загрузки счётчика.

Добавил меню

Всем привет! Вам конечно всё равно, но я добавил меню. Теперь у меня есть навигация не только по меткам, но и по рубрикам. Можно посмотреть все Путешествия или рубрику Программирование включая подрубрики C++, Python, Java и так далее. Всё добавлено вручную, никакой автоматизации.

Поддержка меню в WordPress встроена изначально, все пункты и подменю добавляются в админке, но поскольку тема у меня самописная, пришлось попотеть с CSS и немного с JavaScript. Что-то натырено со сторонних сайтов, что-то взято из видео ниже.

Добавить меню хотел очень давно, но не хватало стимула и знаний. Спасибо каналу хлопца Евгения. После просмотра его видео про адаптивное меню решил сменить профессию сделать похожее на своём сайте.

Дайте знать, если плашка с рубрикой нужна к каждой статье. Хотя кого я спрашиваю, ходит на сайт два с половиной человека. Один из них гуглбот, а второй — это я.

UPD: В мобильной версии сайта добавил меню с помощью плагина WP Mobile Menu.

Блог Евгения Жирнова