Искать:

Dashicons — стандартные иконки WordPress и как с ними работать

Dashicons — это набор встроенных иконок WordPress, изначально разработанных для административной панели. Но вы можете использовать их и на публичной части сайта. Они просты в использовании, не требуют установки сторонних библиотек и позволяют добавлять иконки в кнопки, меню, блоки контента и любой HTML.

Подключение Dashicons

На фронтенде WordPress иконки Dashicons не всегда подключены по умолчанию. Чтобы их использовать, нужно подключить CSS:

<?php
function enqueue_dashicons() {
    wp_enqueue_style('dashicons');
}
add_action('wp_enqueue_scripts', 'enqueue_dashicons');
?>

Это подключает файл dashicons.css со всеми необходимыми стилями.

⚡ На админ-панели WordPress подключение не требуется — Dashicons уже загружены.

Использование Dashicons в HTML

Иконки отображаются через CSS-классы. Общий формат:

<span class="dashicons dashicons-имя-иконки"></span>

Например:

<span class="dashicons dashicons-admin-users"></span>
<span class="dashicons dashicons-email"></span>

Иконка выбирается по имени (dashicons-admin-users, dashicons-email и т.д.). Полный список имён можно найти на официальной странице: Dashicons – WordPress Developer Resources.

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

  1. В кнопке:
<button class="my-button">
    <span class="dashicons dashicons-plus"></span> Добавить элемент
</button>
  1. В меню:
<li>
    <span class="dashicons dashicons-admin-home"></span>
    Главная
</li>
  1. В шорткодах или блоках Gutenberg:

Если вы пишете шорткод, можно выводить иконку динамически:

echo '<span class="dashicons dashicons-star-filled"></span> Избранное';

Динамическая генерация списка Dashicons

Если вы хотите отобразить все иконки на странице, можно использовать шорткод, который динамически извлекает имена иконок из dashicons.css:

echo do_shortcode('[dashicons_dynamic]');

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

Советы по работе с Dashicons

  • Используйте только один тег <span> с классами dashicons dashicons-имя, не оборачивайте в лишние контейнеры.
  • Для изменения цвета и размера используйте CSS:
.dashicons {
    font-size: 24px;
    color: #0073aa;
}
  • Dashicons — шрифтовые иконки, поэтому они масштабируются без потери качества.

Заключение

Dashicons — это удобный и быстрый способ добавлять иконки на сайт WordPress. Их легко подключить, они не требуют сторонних библиотек, и благодаря CSS-классам можно управлять цветом, размером и позиционированием.

Используйте их в админке и на фронтенде — и вы получите аккуратные, современные иконки без лишних файлов и скриптов.

Полный перечень иконок Dashicon в Wordpress

[dashicons_all]

Маска вводя номера телефона на javascript

Пример создания маски ввода номера телефона и код для обработки ввода.

Полезные функции при создании темы Wordpress

При создании новой темы в Wordpress пригодятся следующие функции. Их нужно добавить в файл functions.php своей текущей темы.

Скачать заготовку пустой темы Wordpress

Отключение админбара для публичной части сайта

Для отключения админбара в публичной части сайта нужно добавить специальную команду в файл темы fubctions.php

add_filter('show_admin_bar', '__return_false');

Подключение javascript-файла

add_action( 'wp_enqueue_scripts', 'enqueue_custom_scripts_with_jquery' );
function enqueue_custom_scripts_with_jquery() {
    // Регистрируем и подключаем script.js с зависимостью от jQuery
    wp_enqueue_script(
        'main-script', // Уникальный идентификатор скрипта
        get_template_directory_uri() . '/js/script.js', // Путь к script.js
        array('jquery'), // Зависимость от jQuery
        null, // Версия (null для автоматического обновления)
        true // Подключение в footer
    );
}

Регистрация новых размеров изображений

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

function custom_image_sizes() {
    add_image_size('small-image', 500, 300, true);
    add_image_size('vert-image', 500, 800, true);
    add_image_size('gallery-image', 600, 600, true);
    add_image_size('large-image', 1200, 800, true);
}
add_action('after_setup_theme', 'custom_image_sizes');

function add_custom_image_sizes_to_media_library($sizes) {
    return array_merge($sizes, array(
        'small-image' => __('Малое изображение для анкеты (500х300)'),
        'vert-image' => __('Вертикальное изображение для анкеты (500х800)'),
        'gallery-image' => __('Изображения галереи (600х600)'),
        'large-image' => __('Большое изображение для анкеты (1200х800)')
    ));
}
add_filter('image_size_names_choose', 'add_custom_image_sizes_to_media_library');

Регистрация меню для темы Wordpress

Зарегистрировав новое меню в него можно добавить новые пункты через админку и вывести его в шаблоне специальной командой

function register_custom_menus() {
    register_nav_menus( array(
        'main_menu' => 'Основное меню',
    ) );
}
add_action( 'after_setup_theme', 'register_custom_menus' );

Вывод зарегистрированного меню в шаблоне

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

<?php wp_nav_menu( [
    'container_class' => 'menu-header',
    'theme_location'  => 'primary'
] ); ?>

Полезные функции для форматирования номера телефона

Функция при водит номер телефона вида 89137654321 а виду +7 (913) 765-43-21

function format_phone_number($phone) {
    $phone = preg_replace('/\D/', '', $phone);
    if (strlen($phone) === 11 && $phone[0] === '8') {
        $phone = '+7 (' . substr($phone, 1, 3) . ') ' . substr($phone, 4, 3) . '-' . substr($phone, 7, 2) . '-' . substr($phone, 9, 2);
    }
    return $phone;
}

Функция может быть вызвана, например, для форматирования поля плагина ACF, в шаблоне следующим образом:

$phone = format_phone_number(get_field('phone')); 

Следующая функция преобразует номер телефона для использования в ссылке и приводит телефон вида 89137654321 а виду +79137654321:

function format_phone_for_link($phone) {
    $phone = preg_replace('/\D/', '', $phone);
    if (strlen($phone) === 11 && $phone[0] === '8') {
        $phone = '+7' . substr($phone, 1);
    }
    return $phone;
}

Вызов функции в файле шаблона:

$phone_link = format_phone_for_link(get_field(‘phone’));

Вывод галереи изображений, созданной плагином ACF

Если создано произвольное поле типа «Фотогалерея», то его можно вывести в шаблоне следующим образом:

$images = get_field('fotogalereya');
<?php if( $images ): ?>
    <?php foreach( $images as $image ): ?>
        <a href="<?php echo esc_url($image['url']); ?>">
            <img src="<?php echo esc_url($image['sizes']['gallery-image']); ?>" alt="<?php echo esc_attr($image['alt']); ?>" />
        </a>
    <?php endforeach; ?>
<?php endif; ?>

Подключение файла с фрагментом шаблона

В примере подключается файл nav.php из директории template-parts

<?php get_template_part('/template-parts/nav'); ?>

Вывод url до текущей темы

<?php echo get_template_directory_uri(); ?>

Создание шаблона для страницы

<?php /* Template Name: Мой шаблон страницы Template Post Type: post, page, product */ // … остальной код шаблона

Вывод текущего года с копирайтом в футере

[crayon-6ac911e26ee21992531806 lang=»html»]

© 2023– Webdp. Все права защищены.

[crayon-6ac911e26ee2b614933029]

Изменение страницы оформления заказа в Woocommerce

Создание страницы оформления заказа

Для создания страницы оформления заказа Woocommerce нужно создать обычную страницу и вставить на ней такой шорткод:

[woocommerce_checkout]

По умолчанию страница оформления заказа выглядит таком образом:

Просмотр текущих полей для оформления заказа

Для вывода текущих полей при оформлении заказа можно использовать следующий код, который нужно разместить в файле functions.php своей темы:

add_action( 'wp_footer', 'custom_print_checkout_fields' );
function custom_print_checkout_fields() {
    if ( is_checkout() ) {
        echo '<pre>';
        print_r( WC()->checkout->get_checkout_fields() );
        echo '</pre>';
    }
}

Этот фрагмент кода выведет на странице оформления заказа массив, состоящий из используемых полей:

Array
(
    [billing] => Array
        (
            [billing_first_name] => Array
                (
                    [label] => Имя
                    [required] => 1
                    [class] => Array
                        (
                            [0] => form-row-first
                        )

                    [autocomplete] => given-name
                    [priority] => 10
                )

            [billing_last_name] => Array
                (
                    [label] => Фамилия
                    [required] => 1
                    [class] => Array
                        (
                            [0] => form-row-last
                        )

                    [autocomplete] => family-name
                    [priority] => 20
                )

            [billing_company] => Array
                (
                    [label] => Название компании
                    [class] => Array
                        (
                            [0] => form-row-wide
                        )

                    [autocomplete] => organization
                    [priority] => 30
                    [required] => 
                )

            [billing_country] => Array
                (
                    [type] => country
                    [label] => Страна/регион
                    [required] => 1
                    [class] => Array
                        (
                            [0] => form-row-wide
                            [1] => address-field
                            [2] => update_totals_on_change
                        )

                    [autocomplete] => country
                    [priority] => 40
                )

            [billing_address_1] => Array
                (
                    [label] => Адрес
                    [placeholder] => Номер дома и название улицы
                    [required] => 1
                    [class] => Array
                        (
                            [0] => form-row-wide
                            [1] => address-field
                        )

                    [autocomplete] => address-line1
                    [priority] => 50
                )

            [billing_address_2] => Array
                (
                    [label] => Крыло, подъезд, этаж и т.д.
                    [label_class] => Array
                        (
                            [0] => screen-reader-text
                        )

                    [placeholder] => Крыло, подъезд, этаж и т.д. (необязательно)
                    [class] => Array
                        (
                            [0] => form-row-wide
                            [1] => address-field
                        )

                    [autocomplete] => address-line2
                    [priority] => 60
                    [required] => 
                )

            [billing_city] => Array
                (
                    [label] => Населённый пункт
                    [required] => 1
                    [class] => Array
                        (
                            [0] => form-row-wide
                            [1] => address-field
                        )

                    [autocomplete] => address-level2
                    [priority] => 70
                )

            [billing_state] => Array
                (
                    [type] => state
                    [label] => Область / район
                    [required] => 1
                    [class] => Array
                        (
                            [0] => form-row-wide
                            [1] => address-field
                        )

                    [validate] => Array
                        (
                            [0] => state
                        )

                    [autocomplete] => address-level1
                    [priority] => 80
                    [country_field] => billing_country
                    [country] => RU
                )

            [billing_postcode] => Array
                (
                    [label] => Почтовый индекс
                    [required] => 1
                    [class] => Array
                        (
                            [0] => form-row-wide
                            [1] => address-field
                        )

                    [validate] => Array
                        (
                            [0] => postcode
                        )

                    [autocomplete] => postal-code
                    [priority] => 90
                )

            [billing_phone] => Array
                (
                    [label] => Телефон
                    [required] => 1
                    [type] => tel
                    [class] => Array
                        (
                            [0] => form-row-wide
                        )

                    [validate] => Array
                        (
                            [0] => phone
                        )

                    [autocomplete] => tel
                    [priority] => 100
                )

            [billing_email] => Array
                (
                    [label] => Email
                    [required] => 1
                    [type] => email
                    [class] => Array
                        (
                            [0] => form-row-wide
                        )

                    [validate] => Array
                        (
                            [0] => email
                        )

                    [autocomplete] => email
                    [priority] => 110
                )

        )

    [shipping] => Array
        (
            [shipping_first_name] => Array
                (
                    [label] => Имя
                    [required] => 1
                    [class] => Array
                        (
                            [0] => form-row-first
                        )

                    [autocomplete] => given-name
                    [priority] => 10
                )

            [shipping_last_name] => Array
                (
                    [label] => Фамилия
                    [required] => 1
                    [class] => Array
                        (
                            [0] => form-row-last
                        )

                    [autocomplete] => family-name
                    [priority] => 20
                )

            [shipping_company] => Array
                (
                    [label] => Название компании
                    [class] => Array
                        (
                            [0] => form-row-wide
                        )

                    [autocomplete] => organization
                    [priority] => 30
                    [required] => 
                )

            [shipping_country] => Array
                (
                    [type] => country
                    [label] => Страна/регион
                    [required] => 1
                    [class] => Array
                        (
                            [0] => form-row-wide
                            [1] => address-field
                            [2] => update_totals_on_change
                        )

                    [autocomplete] => country
                    [priority] => 40
                )

            [shipping_address_1] => Array
                (
                    [label] => Адрес
                    [placeholder] => Номер дома и название улицы
                    [required] => 1
                    [class] => Array
                        (
                            [0] => form-row-wide
                            [1] => address-field
                        )

                    [autocomplete] => address-line1
                    [priority] => 50
                )

            [shipping_address_2] => Array
                (
                    [label] => Крыло, подъезд, этаж и т.д.
                    [label_class] => Array
                        (
                            [0] => screen-reader-text
                        )

                    [placeholder] => Крыло, подъезд, этаж и т.д. (необязательно)
                    [class] => Array
                        (
                            [0] => form-row-wide
                            [1] => address-field
                        )

                    [autocomplete] => address-line2
                    [priority] => 60
                    [required] => 
                )

            [shipping_city] => Array
                (
                    [label] => Населённый пункт
                    [required] => 1
                    [class] => Array
                        (
                            [0] => form-row-wide
                            [1] => address-field
                        )

                    [autocomplete] => address-level2
                    [priority] => 70
                )

            [shipping_state] => Array
                (
                    [type] => state
                    [label] => Область / район
                    [required] => 1
                    [class] => Array
                        (
                            [0] => form-row-wide
                            [1] => address-field
                        )

                    [validate] => Array
                        (
                            [0] => state
                        )

                    [autocomplete] => address-level1
                    [priority] => 80
                    [country_field] => shipping_country
                    [country] => RU
                )

            [shipping_postcode] => Array
                (
                    [label] => Почтовый индекс
                    [required] => 1
                    [class] => Array
                        (
                            [0] => form-row-wide
                            [1] => address-field
                        )

                    [validate] => Array
                        (
                            [0] => postcode
                        )

                    [autocomplete] => postal-code
                    [priority] => 90
                )

        )

    [account] => Array
        (
            [account_username] => Array
                (
                    [type] => text
                    [label] => Имя пользователя аккаунта
                    [required] => 1
                    [placeholder] => Имя пользователя
                    [autocomplete] => username
                )

            [account_password] => Array
                (
                    [type] => password
                    [label] => Создать пароль учетной записи
                    [required] => 1
                    [placeholder] => Пароль
                    [autocomplete] => new-password
                )

        )

    [order] => Array
        (
            [order_comments] => Array
                (
                    [type] => textarea
                    [class] => Array
                        (
                            [0] => notes
                        )

                    [label] => Примечание к заказу
                    [placeholder] => Примечания к вашему заказу, например, особые пожелания отделу доставки.
                )

        )

)

Теперь, зная состав полей, можно их изменять.

Пример отключения некоторых полей оформления заказа

Например, для отключения некоторых полей можно добавить в файл functions.php следующий код:

add_filter( 'woocommerce_checkout_fields', 'custom_remove_woocommerce_checkout_fields' );
function custom_remove_woocommerce_checkout_fields( $fields ) {
    // Удаление поля компании
    unset($fields['billing']['billing_company']);
    
    // Удаление поля второго адреса
    unset($fields['billing']['billing_address_2']);
    
    // Удаление поля заметки к заказу
    unset($fields['order']['order_comments']);
    
    return $fields;
}

Пример для оставление полей Фамилия, Имя, Телефон, Электронная поста

Обычно для оформления заказа достаточно полей Фамилия, Имя, Телефон, Электронная почта. Для того чтобы оставить только эти поля при оформлении заказа, а остальные скрыть, можно воспользоваться следующим кодом, который нужно разместить в файле functions.php своей темы:

add_filter( 'woocommerce_checkout_fields' , 'customize_checkout_fields' );

function customize_checkout_fields( $fields ) {
    // Удаление всех полей, кроме Фамилия, Имя, Телефон и Электронная почта
    $fields['billing'] = array(
        'billing_first_name' => $fields['billing']['billing_first_name'],
        'billing_last_name'  => $fields['billing']['billing_last_name'],
        'billing_phone'      => $fields['billing']['billing_phone'],
        'billing_email'      => $fields['billing']['billing_email'],
    );
    
    // Если не нужно отображать поля для доставки
    unset($fields['shipping']);
    
    // Если не нужно отображать поля аккаунта
    unset($fields['account']);
    
    // Если не нужно отображать примечания к заказу
    unset($fields['order']);
    
    return $fields;
}

Создание уникальных Title и Description для интернет-магазина на Woocommerce

Оглавление

Создание уникального Title для категории товаров Woocommerce

На сайте установлен плагин Woocommerce и Yoast SEO. Требуется создать Title по предложенному шаблону:

«Купить (название данного раздела с мал. буквы) от (min цена товара) руб. в Москве с доставкой»

Приведённые в статье фрагменты кода нужно разместить в файле functions.php вашей темы.

add_filter('wpseo_title', 'custom_woocommerce_category_title');
function custom_woocommerce_category_title($title) {
    if (is_product_category()) {
        global $wp_query;

        $category = $wp_query->get_queried_object();
        $category_name = mb_strtolower($category->name);

        // Получаем минимальную цену товара в данной категории
        $args = array(
            'post_type' => 'product',
            'posts_per_page' => 1,
            'post_status' => 'publish',
            'tax_query' => array(
                array(
                    'taxonomy' => 'product_cat',
                    'field'    => 'term_id',
                    'terms'    => $category->term_id,
                ),
            ),
            'meta_key' => '_price',
            'orderby' => 'meta_value_num',
            'order' => 'ASC',
        );
        $loop = new WP_Query($args);
        if ($loop->have_posts()) {
            while ($loop->have_posts()) : $loop->the_post();
                $product = wc_get_product(get_the_ID());
                $min_price = $product->get_price();
            endwhile;
            wp_reset_postdata();
        } else {
            $min_price = 'нет в наличии';
        }

        $title = "Купить {$category_name} от {$min_price} руб. в Казани и Татарстане с доставкой";
    }
    return $title;
}

Создание уникального Description для категории товаров Woocommerce

Исходный шаблон для Description категории товаров:

Купить (название данного раздела с мал.буквы) в Москве с доставкой в мебельном ТЦ. Цены на (название данного раздела с мал. буквы) от (min цена в разделе) руб., высокое качество и гарантия от производителя!

add_filter('wpseo_metadesc', 'custom_woocommerce_category_description');
function custom_woocommerce_category_description($description) {
    if (is_product_category()) {
        global $wp_query;

        $category = $wp_query->get_queried_object();
        $category_name = mb_strtolower($category->name);

        // Получаем минимальную цену товара в данной категории
        $args = array(
            'post_type' => 'product',
            'posts_per_page' => 1,
            'post_status' => 'publish',
            'tax_query' => array(
                array(
                    'taxonomy' => 'product_cat',
                    'field'    => 'term_id',
                    'terms'    => $category->term_id,
                ),
            ),
            'meta_key' => '_price',
            'orderby' => 'meta_value_num',
            'order' => 'ASC',
        );
        $loop = new WP_Query($args);
        if ($loop->have_posts()) {
            while ($loop->have_posts()) : $loop->the_post();
                $product = wc_get_product(get_the_ID());
                $min_price = $product->get_price();
            endwhile;
            wp_reset_postdata();
        } else {
            $min_price = 'нет в наличии';
        }

        $description = "Купить {$category_name} в Москве с доставкой в мебельном ТЦ. Цены на {$category_name} от {$min_price}) руб., высокое качество и гарантия от производителя!";
    }
    return $description;
}

Кроме тега Description, на страниwе есть ещё разметка Open Graph. Для её изменения делаем так же.

function custom_woocommerce_category_og_description($og_description) {
    if (is_product_category()) {
        global $wp_query;

        $category = $wp_query->get_queried_object();
        $category_name = mb_strtolower($category->name);

        // Получаем минимальную цену товара в данной категории
        $args = array(
            'post_type' => 'product',
            'posts_per_page' => 1,
            'post_status' => 'publish',
            'tax_query' => array(
                array(
                    'taxonomy' => 'product_cat',
                    'field'    => 'term_id',
                    'terms'    => $category->term_id,
                ),
            ),
            'meta_key' => '_price',
            'orderby' => 'meta_value_num',
            'order' => 'ASC',
        );
        $loop = new WP_Query($args);
        if ($loop->have_posts()) {
            while ($loop->have_posts()) : $loop->the_post();
                $product = wc_get_product(get_the_ID());
                $min_price = $product->get_price();
            endwhile;
            wp_reset_postdata();
        } else {
            $min_price = 'нет в наличии';
        }

        $og_description = "Купить {$category_name} в Москве с доставкой в мебельном ТЦ. Цены на {$category_name} от {$min_price}) руб., высокое качество и гарантия от производителя!";
    }
    return $og_description;
}

Создание уникального Title для страницы товара Woocommerce

Шаблон title для товаров:

(Название данного товара) – купить по цене (цена товара) руб. в Москве с доставкой

add_filter('wpseo_title', 'custom_woocommerce_product_title', 15);
function custom_woocommerce_product_title($title) {
    if (is_product()) {
        global $post;
        
        // Убедитесь, что объект поста доступен
        if ($post) {
            $product = wc_get_product($post->ID);
            $product_name = $product->get_name();
            $product_price = $product->get_price();

            $title = "{$product_name} – купить по цене {$product_price} руб. в Москве с доставкой";
        }
    }
    return $title;
}

Создание уникального Description для страницы товара Woocommerce

Шаблон для Description страницы товаров содержит значение атрибутов: длина, ширина, высота.

(Название товара) (размеры товара ШхГхД) — купить по цене (цена товара) руб. Стоимость на (название данного раздела с мал. буквы) от (min цена в разделе) руб. в мебельном ТЦ. Высокое качество и гарантия от производителя.

add_filter('wpseo_metadesc', 'custom_woocommerce_product_description', 10, 1);
function custom_woocommerce_product_description($description) {
    if (is_product()) {
        global $post;

        if ($post) {
            $product = wc_get_product($post->ID);
            $product_name = $product->get_name();
            $product_price = $product->get_price();

            // Получаем атрибуты товара
            $height = $product->get_attribute('pa_vysota');
            $length = $product->get_attribute('pa_dlina');
            $width = $product->get_attribute('pa_shirina');

            // Формируем строку размеров
            $dimensions = array_filter([$width, $height, $length]);
            $dimensions_string = implode('x', $dimensions);

            // Получаем категорию товара
            $categories = get_the_terms($post->ID, 'product_cat');
            if ($categories && !is_wp_error($categories)) {
                $category = $categories[0];
                $category_name = mb_strtolower($category->name);

                // Получаем минимальную цену товара в данной категории
                $args = array(
                    'post_type' => 'product',
                    'posts_per_page' => 1,
                    'post_status' => 'publish',
                    'tax_query' => array(
                        array(
                            'taxonomy' => 'product_cat',
                            'field'    => 'term_id',
                            'terms'    => $category->term_id,
                        ),
                    ),
                    'meta_key' => '_price',
                    'orderby' => 'meta_value_num',
                    'order' => 'ASC',
                );
                $loop = new WP_Query($args);
                if ($loop->have_posts()) {
                    while ($loop->have_posts()) : $loop->the_post();
                        $cat_product = wc_get_product(get_the_ID());
                        $min_price = $cat_product->get_price();
                    endwhile;
                    wp_reset_postdata();
                } else {
                    $min_price = 'нет в наличии';
                }
            } else {
                $category_name = '';
                $min_price = 'нет в наличии';
            }

            $description = "{$product_name} ({$dimensions_string}) - купить по цене {$product_price} руб. Стоимость на {$category_name} от {$min_price} руб. в мебельном ТЦ. Высокое качество и гарантия от производителя.";
        }
    }
    return $description;
}

Счётчик просмотров записей в Wordpress

Для добавления количества просмотров постов в Wordpress можно воспользоваться следующим кодом, который необходимо поместить в файл functions.php вашей темы:

// Функция для увеличения счетчика просмотров поста
function increment_post_views($post_id) {
    $current_views = get_post_meta($post_id, 'post_views', true);
    $new_views = $current_views ? $current_views + 1 : 1;
    update_post_meta($post_id, 'post_views', $new_views);
}

// Хук для вызова функции при просмотре поста
function track_post_views() {
    if (is_single()) {
        increment_post_views(get_the_ID());
    }
}
add_action('wp', 'track_post_views');

// Функция для получения количества просмотров поста
function get_post_views($post_id) {
    return get_post_meta($post_id, 'post_views', true) ?: 0;
}

Для вывода количества просмотров добавьте в нужном месте такой код

<?php 
$post_id = get_the_ID();
echo get_post_views($post_id);
 ?>

Отправка данных из формы в телеграм

Создание чат-бота в телеграмм

  1. Введите в поисковой строке @BotFather и выберите бот с официальным подтверждающим знаком, обозначенным синей галочкой рядом с именем.
  2. Нажмите «Запустить», чтобы активировать бота BotFather. В ответ вы получите список команд для управления ботом.
  3. Выберите или введите команду /newbot. Укажите имя бота, которое будут видеть клиенты во время взаимодействия с ним, а также его никнейм, по которому его можно будет найти в Telegram.
  4. Никнейм должен быть уникальным, не совпадать с уже существующими в базе и заканчиваться словом «bot».
  5. После выбора подходящего имени бот будет создан. Вам будет отправлена ссылка на бота вида t.me/<никнейм_бота>, а также рекомендации по установке аватара, описание бота и список команд для его настройки.
Читать далее: Отправка данных из формы в телеграм

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

Для получения идентификатора Telegram публичного чата или группы, вы можете воспользоваться ботом @username_to_id_bot. Вот пошаговая инструкция:

  1. Найдите бота @username_to_id_bot с помощью поиска в Telegram.
  2. Запустите бот, нажав кнопку «Начать».
  3. Перейдите в чат или группу, информацию о которой вы хотите узнать.
  4. Скопируйте ссылку на чат. Вы можете найти её в настройках чата/группы, нажав на кнопку «Пригласить». Ссылка будет расположена в верхней части открывшегося окна.
  5. Вернитесь к боту и отправьте ему скопированную ранее ссылку.
  6. В ответном сообщении вы получите основные данные о чате/группе, включая его идентификатор, который будет указан в нижней строке.

Создание формы на странице

Пример как может выглядеть форма:

<form name="get_calc" action="send-tg.php" method="post" id="telegramForm">
    <input type="text" class="txt" name="firstname" value="" placeholder="Ваше имя">
    <input type="text" class="txt" name="phone" value="" placeholder="Введите Ваш номер">
    <input type="submit" class="feedback_btn-pw" value="Отправить">
</form>

Обработчик формы на php

Создать файл send-tg.php в корне сайта для обработки формы:

<?php

// Устанавливаем параметры бота и ID чата
$botToken = 'ТОКЕН ЧАБ-БОТА';
$chatId = 'ID ЧАТА ГРУППЫ';

$name = $_POST['firstname'];
$phone = $_POST['phone'];


$text = "Заявка с сайта\n\n";
$text .= "Имя: $name\n";
$text .= "Телефон: $phone\n";


$telegramUrl = "https://api.telegram.org/bot$botToken/sendMessage?chat_id=$chatId&text=".urlencode($text);
$response = file_get_contents($telegramUrl);
$responseArray = json_decode($response, true);

if ($responseArray['ok']) {
    echo 'success';
} else {
    echo 'error';
}

Отправка формы без перезагрузки страницы

Отправку можно осуществлять без перезагрузки страницы с помощью JQuery и AJAX запросов:

$(document).ready(function () {
    $('#telegramForm').submit(function (e) {
        e.preventDefault(); // Предотвращаем стандартное поведение отправки формы
        var formData = $(this).serialize(); // Получаем данные формы
        $.ajax({
            type: 'POST',
            url: 'send-tg.php', // Путь к файлу, который будет отправлять данные в Телеграм
            data: formData,
            success: function (response) {
                // Действия при успешной отправке
                $('#telegramForm').trigger("reset"); // Очищаем форму
                $('.modal__desc').text('Сообщение отправлено'); // Изменяем текст в модальном окне
            },
            error: function (xhr, status, error) {
                // Действия при ошибке отправки
                alert('Произошла ошибка при отправке сообщения в Телеграм.');
                console.error(xhr.responseText);
            }
        });
    });
});