It Hints
Search
Close this search box.

Всем при­вет. Вста­ла пере­до мной зада­ча сде­лать для одно­го сво­е­го про­ек­та гене­ра­цию купо­нов после покуп­ки това­ра и так как я рас­щед­рил­ся и решил сде­лать купо­ны нако­пи­тель­ные, т.е. один купон дает скид­ку 100 руб­лей, 10 купо­нов дает скид­ку в 1000 руб­лей, 100 купо­нов даёт скид­ку в 10000 руб­лей и т.д. то вста­ла зада­ча во пер­вых гене­ри­ро­вать эти купо­ны (ну с этим я спра­вил­ся доволь­но быст­ро), а во вто­рых предот­вра­тить повтор­ный вход на стра­ни­цу “Спа­си­бо за покуп­ку” (где и гене­ри­ру­ет­ся купон) ина­че осо­бо про­дви­ну­тые и не очень поку­па­те­ли про­сто смо­гут наге­не­рить себе купо­нов хоть на мил­ли­он, про­сто обнов­ляя страницу.

И так зада­ча сто­ит сле­ду­ю­щая — что­бы URL стра­ни­цы “Спа­си­бо за покуп­ку” менял­ся каж­дый раз при гене­ра­ции купо­на, к при­ме­ру посе­ти­тель после опла­ты попа­да­ет на стра­ни­цу на стра­ни­цу https://site.ru/thanks-you/ ему выво­дит­ся сооб­ще­ние с бла­го­дар­но­стью за покуп­ку и выво­дит­ся купон на скид­ку, теперь если обно­вить стра­ни­цу она уже была не дей­стви­тель­на а сле­ду­ю­щим посе­ти­те­лям гене­ри­ро­ва­лась к при­ме­ру стра­ни­ца https://site.ru/thanks-you-7583/ и если бы посе­ти­тель попы­тал­ся зай­ти на неё повтор­но, то опять таки она была бы не действительна.

При­сту­па­ем.

Шаг 1. гене­ри­ру­ем купон

Делать это мы будем при помо­щи шорт­ко­да [coupon_code] кото­рый сге­не­ри­ру­ет нам ран­дом­ный купон и запи­шет зна­че­ние в файл codecoupon.txt (тут будут хра­нить­ся все сге­не­ри­ро­ван­ные купоны).

Здесь я поста­вил лимит в 10 минут на гене­ра­цию ново­го купо­на (сей­час это не нуж­но), я это сде­лал пото­му что у меня пона­ча­лу не полу­ча­лось изме­нить URL стра­ни­цы и что­бы дать понять поль­зо­ва­те­лю что обнов­ле­ние стра­ни­цы не при­ве­дёт к гене­ра­ции ново­го купо­на то сде­лал пау­зу в 10 минут. Хотя по боль­шо­му сче­ту про­бле­му это не реша­ет, т.к. поль­зо­ва­тель мог бы сге­не­рить новый купон через 15 минут и т.д.

				
					function generate_coupon_code() {
    $coupon_code = get_transient('coupon_code');

    if (false === $coupon_code) {
        $characters = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
        $code_length = 6;
        $coupon_code = '';

        for ($i = 0; $i < $code_length; $i++) {
            $random_index = rand(0, strlen($characters) - 1);
            $coupon_code .= $characters[$random_index];
        }

        $file_path = get_template_directory() . '/codecoupon.txt';
        file_put_contents($file_path, $coupon_code . PHP_EOL, FILE_APPEND | LOCK_EX);

        set_transient('coupon_code', $coupon_code, 10 * MINUTE_IN_SECONDS);
    }

    return $coupon_code;
}
add_shortcode('coupon_code', 'generate_coupon_code');
				
			
Шаг 2. меня­ем URL стра­ни­цы на рандомный Так как у меня за спа­си­бо отве­ча­ет стра­ни­ца с id=11185 то код будет следующий. 
				
					function change_page_permalink($permalink) {
    global $post, $wpdb;

    // Проверяем, является ли текущая страница нужной страницей по ее ID
    if (is_page(11185)) { // Замените 11185 на ID вашей страницы
        // Формируем новый рандомный URL
        $random_number = rand(1000, 9999);
        $new_permalink = home_url('/thanks-' . $random_number . '/');

        // Обновляем физический URL страницы
        $wpdb->update(
            $wpdb->posts,
            array('post_name' => 'thanks-' . $random_number),
            array('ID' => $post->ID)
        );

        return $new_permalink; // Возвращаем новый URL
    }

    return $permalink; // Возвращаем исходный URL для остальных страниц
}
add_filter('page_link', 'change_page_permalink');
// add_filter('post_link', 'change_page_permalink'); // Раскомментируйте если хотите применить это и к постам тоже
				
			

Дан­ный код каж­дый раз меня­ет URL стра­ни­цы с id=11185. URL будет вида /thanks-[рандомное чис­ло от 1000 до 9999]/

Далее я столк­нул­ся со сле­ду­ю­щей про­бле­мой — в WordPress есть встро­ен­ный меха­низм реди­рек­та со ста­ро­го URL на теку­щий, а так как изна­чаль­ный URL у меня был /thanks/ то при попа­да­нии на дан­ный URL поль­зо­ва­те­ля реди­рек­ти­ло на новый URL, избав­ля­ем­ся от этого

Шаг 3. Настра­и­ва­ем редирект

Добав­ля­ем в .htaccess сле­ду­ю­щую строку

				
					Redirect 301 /thanks/ /
				
			

Теперь если поль­зо­ва­тель захо­чет попасть на стра­ни­цу /thanks/ то его пере­на­пра­вит на глав­ную стра­ни­цу сайта

Шаг 4. Запре­ща­ем индек­са­цию стра­ниц со “Спа­си­бо”

Теперь что­бы поис­ко­ви­ки не индек­си­ро­ва­ли наш /thanks/ и /tnanks-[рандомное число]/ добав­ля­ем в tobots.txt сле­ду­ю­щее правило

				
					# Запрет на индексировании страницы со спасибо, так как сюда попадают
# только после оплаты Disallow: /thanks/
Disallow: /thanks-*/
				
			

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

Facebook
Twitter
Email
VK
WhatsApp
Telegram