首頁>Web>source

谷歌搜尋並阅讀後,我發現了下面的代碼.問题是,已经過去了几週,我已经失去了原始帖子。

我現在已经尽力了解如何建立一个与 template_redirect掛钩的函式 這樣我就可以根据訪問者所在的国家/地區来重定向訪客。

我知道這不是防弹的,但不是,但這是我發現的不需要付费插件的最佳解決方案。

This is the IP and Country function:

function visitor_ip_and_country() {
    $client = @$_SERVER['HTTP_CLIENT_IP'];
    $forward = @$_SERVER['HTTP_X_FORWARDED_FOR'];
    $remote = $_SERVER['REMOTE_ADDR'];
    $country = "Unknown";
    if ( filter_var( $client, FILTER_VALIDATE_IP ) ) {
        $ip = $client;
    }
    elseif ( filter_var( $forward, FILTER_VALIDATE_IP ) ) {
        $ip = $forward;
    } else {
        $ip = $remote;
    }
    $ch = curl_init();
    curl_setopt( $ch, CURLOPT_URL, "http://www.geoplugin.net/json.gp?ip=".$ip);
    curl_setopt( $ch, CURLOPT_HEADER, 0);
    curl_setopt( $ch, CURLOPT_RETURNTRANSFER, TRUE );
    $ip_data_in = curl_exec( $ch )
    curl_close( $ch );
    $ip_data = json_decode( $ip_data_in, true );
    $ip_data = str_replace( '"', '"', $ip_data );
    if ( $ip_data && $ip_data['geoplugin_countryName'] != null ) {
        $country = $ip_data['geoplugin_countryName'];
    }
    return 'IP-address: '.$ip.' | Country: '.$country;
}

然後,我試圖建立一个重定向使用者的函式,但是我一直收到"未定義的變數"錯誤。

Here is that code:

add_action( 'template_redirect', 'redirect_canadians' );
function redirect_canadians() {
    
    $redirect = '';
    
    $vc = visitor_ip_and_country($country);
        if ($vc == 'Canada') {
        
            $redirect = 'https://example.com';
            
            wp_redirect($redirect);
            
            die();
    }
}

It refers to this line:

$vc = visitor_ip_and_country($country);

我不知道如何从 visitor_ip_and_country()获取重定向功能来檢查引數 功能。

我需要帮助。

最新回復
  • 6月前
    1 #

    問题是變數 $sountry -這是由於所謂的變數作用域-https://www.php.net/manual/zh-CN/language.variables.scope.php-變數仅在函式內可用,因為您没有"匯出"它 或使其在全球範圍內可用-這是您功能的更新,以顯示其工作方式:

    function visitor_ip_and_country() {
        $client = @$_SERVER['HTTP_CLIENT_IP'];
        $forward = @$_SERVER['HTTP_X_FORWARDED_FOR'];
        $remote = $_SERVER['REMOTE_ADDR'];
        $country = "Unknown";
        if ( filter_var( $client, FILTER_VALIDATE_IP ) ) {
            $ip = $client;
        }
        elseif ( filter_var( $forward, FILTER_VALIDATE_IP ) ) {
            $ip = $forward;
        } else {
            $ip = $remote;
        }
        $ch = curl_init();
        curl_setopt( $ch, CURLOPT_URL, "http://www.geoplugin.net/json.gp?ip=".$ip);
        curl_setopt( $ch, CURLOPT_HEADER, 0);
        curl_setopt( $ch, CURLOPT_RETURNTRANSFER, TRUE );
        $ip_data_in = curl_exec( $ch )
        curl_close( $ch );
        $ip_data = json_decode( $ip_data_in, true );
        $ip_data = str_replace( '"', '"', $ip_data );
        if ( $ip_data && $ip_data['geoplugin_countryName'] != null ) {
            $country = $ip_data['geoplugin_countryName'];
        }
        return array( 
            'ip'       => $ip, 
            'country'  = >$country
            // note, you could add additional keys to this array
        );
    }
    
    add_action( 'template_redirect', 'redirect_canadians' );
    function redirect_canadians() {
        // call your function to get an array with IP and country values ##
        $array = visitor_ip_and_country();
        
        $redirect = '';
        
        $vc = $array['country'];
            if ($vc == 'Canada') {
            
                $redirect = 'https://example.com';
                
                wp_redirect($redirect);
                
                die();
        }
    }
    

    這是一个簡單的解決方案,可以使其正常執行,然後进一步完善。

相似問題

  • drupal:內容過濾器可针對什麼进行過濾?
  • wordpress:使用$ wpdb或其他PHP指令碼方法在wP資料庫中查詢/替換