افزودن QR Code اختصاصی به صفحات محصول ووکامرس

📑 در این مقاله چه می‌خوانیم؟

اضافه کردن QR Code اختصاصی به صفحه هر محصول، یکی از ساده‌ترین و حرفه‌ای‌ترین روش‌هاست تا لینک محصولت همیشه قابل دسترس باشد؛ چه روی موبایل، چه روی چاپ، چه برای اشتراک‌گذاری. با این شورت‌کد می‌توانی بدون هیچ افزونه اضافی، یک QR کاملاً داینامیک بسازی که برای هر محصول به‌صورت خودکار تولید می‌شود و کاربر می‌تواند آن را اسکن یا دانلود کند. این کد امکان سفارشی‌سازی کامل دارد؛ از اندازه تصویر و فرمت خروجی گرفته تا نمایش متن دلخواه بالای QR. حتی می‌توانی Tracking را فعال کنی تا بفهمی هر QR از کجا اسکن شده و چه میزان ورودی از طریق بروشورها و محتوای چاپی دریافت کرده‌ای. تنها کاری که لازم است انجام بدهی این است که شورت‌کد را در صفحه محصول قرار بدهی و از آن لحظه به بعد، هر محصول QR مخصوص خودش را خواهد داشت. این روش نه‌تنها سرعت لود سایت را کاهش نمی‌دهد، بلکه به دلیل وجود قابلیت کش داخلی، همیشه سریع و بهینه کار می‌کند و ظاهر حرفه‌ای‌تری به صفحه‌هایت می‌دهد. در نهایت، این شورت‌کد یک راهکار تمیز، سبک و قابل اعتماد است که تجربه کاربر را بهتر می‌کند و به افزایش فروش کمک می‌کند؛ بدون نیاز به هیچ افزونه‌ای.

 

کافیست شورت‌کدی بهت می‌دم که با قرار دادن آن داخل صفحهٔ تک (Single) هر محصول، به‌صورت خودکار برای همان محصول یک QR اختصاصی تولید و نمایش می‌دهد. کد را کافیست در فایل functions.php قالب یا در یک پلاگین کوچک قرار دهی؛ سپس در محتوای صفحهٔ محصول از شورت‌کد استفاده کن.

 

add_shortcode('product_qrcode', function ($atts = []) {

    if ( ! function_exists('is_product') || ! is_product() ) {
        return '';
    }

    global $post;

    $defaults = [
        'size'   => 50,
        'css'    => 50,
        'format' => 'svg',
        'ecc'    => 'M',
        'margin' => 0,
        'align'  => 'center',
        'label'  => '' ,
        'track'  => '0',
        'cache'  => '1'
    ];

    $opt = shortcode_atts($defaults, $atts, 'product_qrcode');

    $qr_px     = max(80, intval($opt['size']));
    $qr_css    = max(60, intval($opt['css']));
    $qr_format = (strtolower($opt['format']) === 'svg') ? 'svg' : 'png';

    $eccValid  = ['L','M','Q','H'];
    $qr_ecc    = in_array(strtoupper($opt['ecc']), $eccValid, true) ? strtoupper($opt['ecc']) : 'M';

    $qr_margin = max(0, intval($opt['margin']));
    $qr_align  = (in_array($opt['align'], ['left','center','right'], true)) ? $opt['align'] : 'center';

    $qr_label  = esc_html(trim(wp_strip_all_tags($opt['label'])));
    $qr_track  = in_array(strtolower($opt['track']), ['1','true','yes'], true);
    $qr_cache  = in_array(strtolower($opt['cache']), ['1','true','yes'], true);

   
    $target = get_permalink($post->ID);

    if ($qr_track) {
        $target = add_query_arg([
            'utm_source'   => 'avin_qr',
            'utm_medium'   => 'print',
            'utm_campaign' => 'product_' . $post->ID,
        ], $target);
    }


    $remote_api = add_query_arg([
        'size'   => "{$qr_px}x{$qr_px}",
        'data'   => $target,
        'margin' => $qr_margin,
        'ecc'    => $qr_ecc,
        'format' => $qr_format,
    ], 'https://api.qrserver.com/v1/create-qr-code/');


    $qr_src  = $remote_api;
    $dl_name = sanitize_title(get_the_title($post->ID)) . "-qr." . $qr_format;

    if ($qr_cache) {

        $upload = wp_upload_dir();

        if (!empty($upload['basedir']) && !empty($upload['baseurl'])) {

            $avin_dir  = trailingslashit($upload['basedir']) . 'avin-qrcodes';
            $avin_url  = trailingslashit($upload['baseurl']) . 'avin-qrcodes';

            if (!file_exists($avin_dir)) {
                wp_mkdir_p($avin_dir);
            }

            $hash      = md5($target . $qr_px . $qr_margin . $qr_ecc . $qr_format);
            $filename  = $hash . '.' . $qr_format;
            $filepath  = $avin_dir . '/' . $filename;
            $file_url  = $avin_url . '/' . $filename;

            if (!file_exists($filepath)) {

                $request = wp_remote_get($remote_api, ['timeout' => 15]);

                if (!is_wp_error($request) && wp_remote_retrieve_response_code($request) === 200) {

                    $body = wp_remote_retrieve_body($request);

                    if (!empty($body)) {
                        file_put_contents($filepath, $body);
                        $qr_src = $file_url;
                    }
                }

            } else {
                $qr_src = $file_url;
            }

            $dl_name = $filename;
        }
    }


    $html  = '<div class="avin-qr-wrapper" style="margin:2px 0;text-align:' . $qr_align . ';">';

    if ($qr_label !== '') {
        $html .= '<div class="avin-qr-label" style="font-size:14px;margin-bottom:8px;">' . $qr_label . '</div>';
    }

    $html .= '<a href="' . esc_url($qr_src) . '" download="' . esc_attr($dl_name) . '">';
    $html .= '<img src="' . esc_url($qr_src) . '" alt="QR - ' . esc_attr(get_the_title($post->ID)) . '" width="' . $qr_css . '" height="' . $qr_css . '" loading="lazy" decoding="async">';
    $html .= '</a>';

    $html .= '</div>';

    return $html;
});

 

پست های اخیر

قیمت طراحی سایت شرکتی
قیمت طراحی سایت شرکتی | تعرفه و هزینه طراحی وبسایت حرفه‌ای
طراحی سایت در انزلی
طراحی سایت وردپرس در انزلی | تحویل سریع + پشتیبانی رایگان
خرید سایت فروشگاهی آماده
خرید سایت فروشگاهی آماده | طراحی مدرن + درگاه بانکی آسان
تفاوت طراحی سایت اختصاصی و قالب آماده
تفاوت طراحی سایت اختصاصی و قالب آماده | امنیت، سئو و برندیگ در یک نگاه
طراحی سایت رودسر
طراحی سایت رودسر | تخصصی‌ ترین خدمات وب در گیلان
راهنمای کامل سرعت سایت | کلید موفقیت در جذب کاربر