현재 페이지의 URL을 표시하는 방법은 무엇입니까?


55

내 사이트의 페이지가 브라우저에로드 될 때마다 해당 페이지의 URL이 화면에 표시되도록 사용자 지정 PHP 코드를 추가하고 싶습니다. 사용할 수 echo get_permalink()있지만 모든 페이지에서 작동하지는 않습니다. 일부 페이지 (예 : 내 홈페이지 )에는 여러 게시물이 표시 되며이 get_permalink()페이지에서 사용 하면 표시된 페이지의 URL이 반환되지 않습니다 (루프에서 마지막 게시물의 URL을 반환한다고 생각합니다). 이 페이지에서 URL을 어떻게 반환합니까?

get_permalink()루프가 실행되기 전에 발생하는 특정 후크에 연결할 수 있습니까 ? 아니면 어떻게 든 루프를 끊거나 완료되면 재설정 할 수 있습니까?

감사.


이 URL로 무엇을하고 싶은지에 대한 컨텍스트를 제공 할 수 있습니까? 공유 가능한 URL을 만들려고합니까? 링크 / 액션에 대한 맞춤 URL을 조립 하시겠습니까?
Tom J Nowell

@TomJNowell 특정 JS 스크립트를 대기열에 넣고 싶지만 특정 페이지에서만 (이 경우 해당 페이지는 다양한 언어로 된 내 사이트의 홈페이지입니다. example.com , example.com/fr , example.com/es , 기타). JS 파일은 서버에만 홈페이지에 나타나는 여러 타이틀에 하이퍼 링크를 추가합니다.
cag8f

is_home()또는 is_page( 'fr' )등을 사용 하고 스크립트가 참인 경우에만 큐에 넣지 않습니까?
Tom J Nowell

@TomJNowell 이제 내 코드는 if ( home_url( $wp->request ) == home_url() ) { wp_enqueue_script();} 언어에 관계없이 모든 홈 페이지에서 발생하는 것으로 보입니다. 그게 당신이 제안한 것입니까?
cag8f

$_SERVER['REQUEST_URI']회사와 사용하지 않습니까? 이 질문을보십시오 : stackoverflow.com/q/6768793/247696
Flimm

답변:


86

get_permalink() 단일 페이지 및 게시물에만 유용하며 루프 내부에서만 작동합니다.

내가 본 가장 간단한 방법은 다음과 같습니다.

global $wp;
echo home_url( $wp->request )

$wp->requestURL의 경로 부분을 포함합니다 (예 : /path/to/pagehome_url()설정> 일반 URL을 출력,하지만 당신은 여기에 경로를 추가 할 수 있습니다, 그래서 우리는이 코드에서 홈 URL에 대한 요청 경로를 추가하고 있습니다.

이것은 Permalinks를 Plain으로 설정 한 경우에는 작동하지 않으며 쿼리 문자열 ( ?foo=barURL 의 일부)을 생략합니다.

퍼머 링크가 일반으로 설정되어있을 때 URL을 얻으려면 $wp->query_vars대신 URL 을 전달하면됩니다 add_query_arg().

global $wp;
echo add_query_arg( $wp->query_vars, home_url() );

그리고이 두 가지 방법을 결합하여 영구 링크 설정에 관계없이 쿼리 문자열을 포함한 현재 URL을 얻을 수 있습니다.

global $wp;
echo add_query_arg( $wp->query_vars, home_url( $wp->request ) );

7
퍼머 링크가 일반으로 설정된 경우 : echo '//' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];.
맥스 유딘

1
@Jacob 나는 그것을 시도했지만 내 홈페이지의 URL 만 반환하는 것 같습니다. 이 페이지의 왼쪽 상단 ( dev.horizonhomes-samui.com/properties/hs0540 ) 에서 볼 수 있듯이 여기에 코드를 삽입했습니다 echo home_url( $wp->request ). 나는 global $wp또한 포함하도록 보장했다 . 퍼머 링크는 '일반'이 아니라 '게시 이름'으로 설정되어 있습니다. 로그에 관련 PHP 오류가 표시되지 않습니다. 이 특정 페이지는 개발자 사이트의 일부이므로 방문자에게 차단됩니다. 그것이 중요한지 확실하지 않습니다. 편집 : 실제로, 그 생각을 유지하십시오. 사용자 오류 일 수 있습니다. 대기 ...
cag8f

@Jacob edit 2 : 코드가 실제로 작동합니다. 내 문제는 functions.php 'naked'에 코드를 포함시키는 것입니다. 즉 후크에 연결된 함수에는 없습니다. 그래서 귀하의 코드는 브라우저에 표시된 페이지에 관계없이 홈페이지의 URL을 반환했습니다. 코드를 WP 훅 (wp_enqueue_scripts)에 첨부 된 함수 내로 이동하면 실제로 표시된 페이지의 URL을 반환했습니다. 그 행동의 이유를 알고 있습니까? 어쩌면 나는 그것에 대한 새로운 질문을 만들어야 할 수도 있습니다.
cag8f

3
@ cag8f 만약 코드가 functions.php에서 "naked"상태라면 $ wp 객체의 모든 속성이 설정되기 전에 코드를 실행하고 있습니다. 적절한 후크에 연결된 함수로 랩핑하면 Wordpress 코드의 적절한 지점이 실행될 때까지 실행이 지연됩니다.
Andy Macaulay-Brook

이 방법들은 모두 WordPress로 작업하기위한 훌륭하고 훌륭한 아이디어입니다. trailingslashit()필요에 따라 추가 할 수도 있습니다 .
Jake

8

아래 코드를 사용하여 WordPress에서 전체 현재 URL을 얻을 수 있습니다.

global $wp;
$current_url = home_url(add_query_arg(array(), $wp->request));

쿼리 매개 변수를 포함한 전체 경로가 표시됩니다.


안녕 - 당신이 한 번 봐 경우 developer.wordpress.org/reference/functions/add_query_arg~~V를 사용하면 코드가 실제로 기존 쿼리 매개 변수를 보존하지 않는 것을 볼 수 있습니다.
Andy Macaulay-Brook

2
쿼리 매개 변수를 유지하려면 빈 array()을 로 교체해야합니다 $_GET. 즉 :home_url(add_query_arg($_GET,$wp->request));
브래드 아담스

워드 프레스는 하위 디렉토리에 설치되어있는 경우 작동하지 않습니다
ManzoorWani

1
function current_location()
{
    if (isset($_SERVER['HTTPS']) &&
        ($_SERVER['HTTPS'] == 'on' || $_SERVER['HTTPS'] == 1) ||
        isset($_SERVER['HTTP_X_FORWARDED_PROTO']) &&
        $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') {
        $protocol = 'https://';
    } else {
        $protocol = 'http://';
    }
    return $protocol . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
}

echo current_location();

이 코드로 문제를 해결하는 방법과 이유를 설명 할 수 있습니까?
kero

제 생각에는 가장 유연한 솔루션입니다. 모든 WP 페이지 (wp-admin, wp-login.php, 아카이브 페이지 등)에서도 작동합니다. URL 매개 변수가 포함되어 있지 않습니다.
Philipp

1

다음 코드는 현재 URL을 제공합니다.

global $wp;
echo home_url($wp->request)

아래 코드를 사용하여 쿼리 매개 변수와 함께 전체 URL을 얻을 수 있습니다.

global $wp;  
$current_url = home_url(add_query_arg(array($_GET), $wp->request));

쿼리 매개 변수를 포함한 전체 경로가 표시됩니다. URL에 이미있는 경우 쿼리 매개 변수가 유지됩니다.


이 스 니펫은 wp-admin/plugins.php현재 URL에서 건너 뜁니다 . 루트 경로와 쿼리 문자열 일뿐입니다.
Ryszard Jędraszyk 1

0

이것은 앞에서 언급 한 개선 된 방법입니다. pretty URL이 활성화 된 경우 작동하지만 / page-slug /? param = 1 과 같은 쿼리 매개 변수 가 있거나 URL이 전혀없는 경우 삭제됩니다.

다음 예제는 두 경우 모두에서 작동합니다.

    $query_args = array();

    $query = wp_parse_url( $YOUR_URL );

    $permalink = get_option( 'permalink_structure' );

    if ( empty( $permalink ) ) {

        $query_args = $query['query'];

    }

    echo home_url( add_query_arg( $query_args , $wp->request ) )

0

아마도 wp_guess_url()당신이 필요한 것입니다. 버전 2.6.0부터 사용 가능합니다.


이것은 단지 기본 URL을 추측합니다. 프런트 엔드에서는와 비슷한 효과가 나타납니다 home_url().
Jake

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.