sourcetip

하위 폴더를 PHP를 사용하여 WordPress에서 국가 코드로 동적으로 다시 작성

fileupload 2023. 9. 25. 22:54
반응형

하위 폴더를 PHP를 사용하여 WordPress에서 국가 코드로 동적으로 다시 작성

이 질문이 여러 번 제기된 것을 알고 있지만 문제를 해결하기 위해 사용할 수 있는 해결책이나 예시를 찾지 못했습니다.

저는 고객 사이트에서 일하고 있습니다.두 곳의 유사한 사이트가 있는데, 하나는 자국을 위한 사이트이고, 다른 나라의 방문객들을 위한 사이트입니다.

서버의 루트에 호스팅되는 기본 사이트와 하위 폴더에 호스팅되는 두 번째 사이트.

이제 제가 원하는 것은 방문하는 사용자의 국가 코드를 가진 하위 폴더에 호스팅되는 두 번째 사이트에 대한 동적 URL 재작성입니다.

예를 들어.

http://example.com
http://example.com/subfolder/

URL 입니다.

나는 이것을 원해요.http://example.com/subfolder/이렇게 바뀌다http://example.com/country_code/어디에country_codePHP 기능을 통해 ISO 형식으로 방문자 국가 코드입니다.

그래서 만약 사용자가 미국에서 왔다면.subfolder로 변경해야 합니다.us, 새 URL은 지금이어야 합니다.http://example.com/us/.

페이지, 게시물, 카테고리, 태그 또는 작성자 페이지 등 모든 유형의 페이지에서 작동하기를 원합니다.

그래서 또.http://example.com/subfolder/any-type-of-url/=>http://example.com/country_code/any-type-of-url/

기억하세요.country_code는 ISO 형식의 사용자/방문자 국가 코드입니다.

만약 누군가 이것에 대한 더 많은 정보가 필요하면 저에게 알려주세요.미리 감사드립니다.

추신: 저는 이것을 시도했습니다.add_rewrite_rule()WP에서 사용 가능한 기능입니다.

사용자 국가 ISO 코드를 기반으로 필터를 통해 재작성 규칙을 가장하여 수행할 수 있습니다.아래 코드를 찾아주시기 바랍니다.

function prepend_default_rewrite_rules( $rules ) {

// Prepare for new rules
$new_rules = [];

// Set up languages, except default one, get user language code
$user = get_current_user_id();  
$language_slugs = (array) get_user_meta($user->ID, 'country_code');

// Generate language slug regex
$languages_slug = '(?:' . implode( '/|', $language_slugs ) . '/)?';


// Set up the list of rules that don't need to be prefixed
$whitelist = [
    '^wp-json/?$',
    '^wp-json/(.*)?',
    '^index.php/wp-json/?$',
    '^index.php/wp-json/(.*)?'
];

// Set up the new rule for home page
$new_rules['(?:' . implode( '/|', $language_slugs ) . ')/?$'] = 'index.php';

// Loop through old rules and modify them
foreach ( $rules as $key => $rule ) {

    // Re-add those whitelisted rules without modification
    if ( in_array( $key, $whitelist ) ) {

        $new_rules[ $key ] = $rule;

    // Update rules starting with ^ symbol
    } elseif ( substr( $key, 0, 1 ) === '^' ) { 

        $new_rules[ $languages_slug . substr( $key, 1 ) ] = $rule;


    // Update other rules
    } else {

        $new_rules[ $languages_slug . $key ] = $rule;

    }
}


 // Return out new rules
 return $new_rules;
}
add_filter( 'rewrite_rules_array', 'prepend_default_rewrite_rules' );

.htaccess가 이를 달성하는 더 빠른 방법이 될 것이며 사용자가 전체 페이지 캐시를 구현하는 데도 문제가 없을 것입니다.

웹 사이트에서 cloudflare를 사용하는 경우 cloudflare 자체에서 국가를 가져오는 다음과 같은 간단한 코드를 사용할 수 있습니다 ;)

Options +FollowSymLinks
RewriteEngine on

#INDIA
RewriteCond %{HTTP:CF-IPCountry} ^IN$
RewriteRule !^in/ /in%{REQUEST_URI} [NC,NE,R,L]

#USA
RewriteCond %{HTTP:CF-IPCountry} ^US$
RewriteRule !^us/ /us%{REQUEST_URI} [NC,NE,R,L]

#THAILAND
RewriteCond %{HTTP:CF-IPCountry} ^TH$
RewriteRule !^th/ /th%{REQUEST_URI} [NC,NE,R,L]

이것은 대체할 것입니다.

사용자가 미국에서 온 경우 xyz.com/sg/random 로 xyz.com/us/random .

GeoIP를 사용하려는 경우

GeoIPEnable On
GeoIPDBFile /path/to/GeoIP.dat

RewriteEngine on

#INDIA
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^IN$
RewriteRule !^in/ /in%{REQUEST_URI} [NC,NE,R,L]

#USA
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^US$
RewriteRule !^us/ /us%{REQUEST_URI} [NC,NE,R,L]

#THAILAND
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^TH$
RewriteRule !^th/ /th%{REQUEST_URI} [NC,NE,R,L]

사용 사례에 따라 항상 더 많은 국가를 추가할 수 있습니다.누군가도 여전히 PHP 코드를 찾고 있습니다. 그냥 저에게 알려주세요.

Wordpress 기반 PHP의 경우

 //For fetching url eg. xyz.com/in/  from xyz.com/in/random-link/abc
 $current_url = home_url( add_query_arg( NULL, NULL ) );

 //For fetching random-link/abc
 $current_rel_url = str_replace( home_url(), "", $current_url );

 // I am using cloudflare country variable here , you can use any of your api or whatever method needed

 if( !empty($_SERVER["HTTP_CF_IPCOUNTRY"]) ) {
    $userCountry = $_SERVER["HTTP_CF_IPCOUNTRY"];
    exit( wp_safe_redirect( site_url() . $userCountry . $current_rel_url ) );
  }

용도에 따라 리디렉션 조건을 수정할 수 있습니다.

언급URL : https://stackoverflow.com/questions/44701811/rewrite-sub-folder-dynamically-with-country-code-in-wordpress-using-php

반응형