/** * Taliran - Download Category Access * CPT: download * Taxonomy: download_category * Gravity Form: 14 * Hidden Field: 5 */ /* ----------------------------------------------------------- * 1. جلوگیری از دسترسی مستقیم به دسته‌های دانلود * ----------------------------------------------------------- */ add_action('template_redirect', 'taliran_protect_download_categories'); function taliran_protect_download_categories() { // فقط روی صفحات دسته‌بندی دانلود اجرا شود if ( ! is_tax('download_category') ) { return; } // اگر کاربر قبلاً فرم را تکمیل کرده، اجازه دسترسی بده if ( isset($_COOKIE['taliran_catalog_access']) && $_COOKIE['taliran_catalog_access'] === '1' ) { return; } // آدرس صفحه فرم $form_page = home_url('/product-catalog/'); // آدرس دسته‌ای که کاربر می‌خواست وارد آن شود $current_url = get_term_link(get_queried_object()); if ( is_wp_error($current_url) ) { return; } // ارسال کاربر به فرم و نگه داشتن آدرس دسته $redirect_url = add_query_arg( 'catalog_redirect', $current_url, $form_page ); wp_safe_redirect($redirect_url); exit; } /* ----------------------------------------------------------- * 2. بعد از ثبت موفق فرم 14، دسترسی کاربر فعال شود * ----------------------------------------------------------- */ add_action( 'gform_after_submission_14', 'taliran_catalog_form_submitted', 10, 2 ); function taliran_catalog_form_submitted($entry, $form) { // فعال کردن دسترسی به کاتالوگ‌ها برای 30 روز setcookie( 'taliran_catalog_access', '1', time() + (30 * DAY_IN_SECONDS), COOKIEPATH, COOKIE_DOMAIN, is_ssl(), true ); } /* ----------------------------------------------------------- * 3. بعد از Submit، کاربر به همان دسته‌ای که از آن آمده برگردد * ----------------------------------------------------------- */ add_filter( 'gform_confirmation_14', 'taliran_catalog_confirmation_redirect', 10, 4 ); function taliran_catalog_confirmation_redirect( $confirmation, $form, $entry, $ajax ) { // گرفتن مقدار Hidden Field شماره 5 $redirect_url = rgar($entry, '5'); // اگر مقدار خالی بود، همان Confirmation معمولی اجرا شود if ( empty($redirect_url) ) { return $confirmation; } // بررسی امنیتی: فقط اجازه URLهای همین سایت $redirect_host = wp_parse_url($redirect_url, PHP_URL_HOST); $site_host = wp_parse_url(home_url('/'), PHP_URL_HOST); if ( empty($redirect_host) || $redirect_host !== $site_host ) { return $confirmation; } // فقط اجازه برگشت به download_category را بده $redirect_path = wp_parse_url($redirect_url, PHP_URL_PATH); if ( empty($redirect_path) || strpos($redirect_path, '/download_category/') !== 0 ) { return $confirmation; } // انتقال به همان دسته‌ای که کاربر از آن آمده return array( 'redirect' => esc_url_raw($redirect_url) ); }