Функции WordPress — Post excerpt, Slugify

browser cache

Для облегчения жизни разработчиков предлагаем несколько решений для сайта помогающих решить задачи при выводе контента на страницах. Функции для WordPress. Post excerpt. Slugify. Body class. «Контакт форм 7» — дата-атрибут.

Функция преобразования тайтла в ‘slug’ — Slugify.

Необходимость в этом часто возникает при выводе контента по мета-тэгам или названию. Как вывести название — всем понятно the_title, но для реализации некоторых задач необходимо вывести это название в виде слага. Такая ситуация может возникнуть при подключении фильтра на страницах или при других условиях. Особенно приходится ломать голову, когда это название или мета-тэг написаны в оригинале на кирилице и состоят из двух слов.
Например два слова «Каталог продуктов» надо преобразовать в слаг «catalog-productov».
В файл functions.php вставьте такую функцию:

 

function slugify($text) {
$text = preg_replace('~[^\pL\d]+~u', '-', $text);
$text = iconv('utf-8', 'us-ascii//TRANSLIT', $text);
$text = preg_replace('~[^-\w]+~', '', $text);
$text = trim($text, '-');
$text = preg_replace('~-+~', '-', $text);
$text = strtolower($text);
if (empty($text)) {
return 'n-a';
}
return $text;
}

 

Для вывода слага в нужном месте просто вставьте

 

<?php echo slugify(the_title); ?>

 

Вместо тайтла как в примере можно вывести любое значение, например

 

<?php echo slugify($term->name); ?>

— если используются какие-то метаданные.
Результат работы функции можно посмотреть здесь, для каждого блока и вкладки меню, тайтл мета-поля преобразован в slug.

 

Вывод фрагмента текста в цикле (Post excerpt).

Иногда при вызове анонсов нескольких постов, а возможно и одного (в зависимости от дизайна) необходимо вывести ограниченное количество слов для каждого поста.
Чтобы не создавать дополнительного поля для такой фразы или выводить отрывок — «the_excerpt» который надо будет заполнять для каждого поста, вставьте в файл function.php следующий код:

 

function excerpt($limit) {
$excerpt = explode(' ', get_the_excerpt(), $limit);
if (count($excerpt)>=$limit) {
array_pop($excerpt);
$excerpt = implode(" ",$excerpt).'...';
} else {
$excerpt = implode(" ",$excerpt);
}
$excerpt = preg_replace('`\[[^\]]*\]`','',$excerpt);
return $excerpt;
}

И в том месте, где надо вывести отрывок вставьте

<?php echo excerpt(30); ?>

 

Добавление класса к тегу BODY

Для стилизации блоков в зависимости от страницы на которой находится посетитель или для других случаев желательно добавить класс с тегу <body> на целевой странице.   Добавьте в файл functions.php представленный ниже код:

function add_slug_body_class( $classes ) {
    global $post;
    if ( isset( $post ) ) {
        $classes[] = $post->post_type . '-' . $post->post_name;
    }
    return $classes;
}
add_filter( 'body_class', 'add_slug_body_class' );

Эта функция добавит к тегу <body>  классы ID страницы и название шаблона страницы.

 

Исправляем ошибку в консоли браузера, когда элемент страницы с атрибутом aria-hidden=«true» содержит фокусируемые элементы при закрытии модального окна Bootstrap.

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

 

document.addEventListener('hide.bs.modal', function (event) {
    // Снимаем фокус с активного элемента
    if (document.activeElement) {
    document.activeElement.blur();
    }
});

 

Добавляем дата-атрибут к инпуту в форме «Contact Form 7».

Для выполнения скриптов или взаимодействия пользователя с формой бывают необходимы дополнительные данные которые обычно добавляются через data-attribute в полях формы.

По умолчанию плагин «Contact Form 7» удалит все неофициальные теги. Чтобы всё сработало вставьте в файл functions.php вашей темы следующий код.

 

add_filter( 'wpcf7_form_tag', function ( $tag ) {
    $datas = [];
    foreach ( (array)$tag['options'] as $option ) {
        if ( str_starts_with( $option, 'data-' ) ) {
            $option = explode( ':', $option, 2 );
            $datas[$option[0]] = apply_filters('wpcf7_option_value', $option[1], $option[0]);
        }
    }
    if ( ! empty( $datas ) ) {
        $id = uniqid('tmp-wpcf');
        $tag['options'][] = "class:$id";
        add_filter( 'wpcf7_form_elements', function ($content) use ($id, $datas) {
            return str_replace($id, $name, str_replace($id.'"', '"'. wpcf7_format_atts($datas), $content));
        });
    }
    return $tag;
} );

В нужном поле добавьте атрибут в следующем виде: [textarea your-message data-height:60 placeholder "Ваше сообщение"].

Теперь дата-атрибут будет добавлен в нужном поле. Чтобы увидеть результат, откройте контактную форму на этом сайте, кнопка «Контакты» в хедере и в панели разработчика обратите внимание на текстовое поле — к нему добавлен атрибут data-height="60".  Для этого поля написан скрипт изменяющий высоту поля в зависимости от количества набираемого текста.

 

Добавить копирайт разработчика в футер админ-панели WordPress.

Чтобы ссылка на страницу или просто упоминание разработчика отображалось в подвале админ-панели сайта WordPress, добавьте в файл функций темы следующий код.

 

add_filter(
    'admin_footer_text',
    function ( $footer_text ) {
        // Измените текст в строке на свои данные
        $footer_text = 'Powered by <a href="https://www.wordpress.org" target="_blank" rel="noopener">WordPress</a> | Developed by: <a href="https://toffi-design.com" target="_blank" rel="noopener norefferer">Toffi Design</a>';

        return $footer_text;
    }
);

В Авторскую ссылку вставьте свои данные, а ссылку на WordPress оставляем из уважения. Ну или как хотите.

1 комментарий

  • Does your site have a contact page? I’m having a tough time
    locating it but, I’d like to send you an e-mail. I’ve
    got some suggestions for your blog you might be interested in hearing.
    Either way, great website and I look forward to seeing it
    grow over time.

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *


Похожие записи