source

WordPress에서 현재 페이지 이름을 얻으려면 어떻게 해야 합니까?

lovecheck 2023. 3. 13. 20:34
반응형

WordPress에서 현재 페이지 이름을 얻으려면 어떻게 해야 합니까?

WordPress 테마에서 현재 페이지 이름을 검색하기 위해 사용할 수 있는 PHP 코드는 무엇입니까?

지금까지 본 모든 솔루션:

  • the_title()
  • get_page()->post_name
  • get_post()
  • 기타.

단, 투고 엔트리가 있는 페이지에서는 사용할 수 없습니다.모두 최신 블로그 엔트리의 이름을 반환합니다.

WordPress에서 "My News"라는 이름의 페이지가 생성되었다고 가정해 보십시오.이 페이지는 "게시 페이지"로 설정됩니다.페이지에 투고를 몇 개 추가합니다.그러면 최신 게시물 이름 대신 어떤 API를 사용하여 "my-news" 문자열을 검색할 수 있을까요?


나는 효과가 있는 것으로 보이는 다음과 같은 변수를 발견했다.

$wp_query->queried_object->post_name

이것은 실제로 제가 찾고 있던 페이지명(slug)의 URL 친화 버전입니다.이는 기본 템플릿(Twenty Ten)을 사용하여 테스트되었습니다.아래 두 변수가 제 사이트에서 작동하지 않는 이유를 잘 모르겠습니다.을 준 키치 덕분에.

그런데 왜 이 정보가 그렇게 깊숙이 숨겨져 있는 걸까요?

변수 WordPress " "$pagename이용하실 수 있을 겁니다.방금 말씀하신 것과 같은 설정으로 시도했습니다.

$pagenamewp-disc/disc」는, php 함수내의 「wp-disc/disc」입니다get_page_template()물론 페이지 테마 파일이 해석되기 전에 호출되므로 페이지 템플릿 내의 어느 지점에서나 사용할 수 있습니다.

  • 되어 있지 것 만, 「 」는, 「 」를 참조해 주세요.$pagenamevar permalinks를 사용하는 됩니다.사용하지 않으면 WordPress는 페이지슬래그가 필요없기 때문에 셋업이 되지 않기 때문인 것 같습니다.

  • $pagename페이지를 정적 선두 페이지로 사용할 경우 설정되지 않습니다.

  • , / wp - / / wp - / / -theme 내theme 내php 내php php you php php php php 、 php 、 phpphpphp php 、 php you 、 php php you you you you $pagename설정할 수 없습니다.

--

if ( !$pagename && $id > 0 ) {
  // If a static page is set as the front page, $pagename will not be set. Retrieve it from the queried object
  $post = $wp_query->get_queried_object();
  $pagename = $post->post_name;
}

이 페이지의 슬래그 이름을 얻기 위한 나의 접근법:

$slug = basename(get_permalink());
<?php wp_title(''); ?>

이건 나한테 효과가 있었어.

제가 제대로 이해했다면, 당신은 투고 항목이 있는 페이지에서 페이지 이름을 얻기를 원합니다.

좋아, 루프하기 전에 페이지 제목을 잡아야 해.

$page_title = $wp_query->post->post_title;

http://codex.wordpress.org/Function_Reference/WP_Query#Properties 를 참조해 주세요.

을 실행합니다.

print_r($wp_query)

가 하기 전에 값을 .$wp_query★★★★★★ 。

변수인 「」, 「」로 취득할 수 .$post:

echo $post->post_title

주의: 함수 또는 클래스에서 다음을 지정해야 합니다.global $post;사용하려고 하기 전에$post.

페이지에 루프가 있는 경우는, 각 루프를 반드시wp_reset_postdata();세팅하다$post표시된 기본 항목(페이지)으로 돌아갑니다.

'post_title' 변수는 모든 커스텀루프/쿼리에도 사용할 수 있습니다.메뉴 항목 및 미디어 첨부 파일 포함...WordPress의 모든 것은 '포스트'입니다.

「포스트」글로벌 변수를 사용하면 됩니다.

global $post;
echo $post->post_title;

현재 페이지/게시 제목을 반영합니다.

기능 내에서 현재 페이지에 액세스하려는 경우.php 파일(루프 전, 이전)$post이 입력되기 전에$wp_queryis initialized, etc.) 서버 변수 자체에 액세스하여 쿼리 문자열에서 요청된 페이지를 추출할 수 밖에 없습니다.

$page_slug = trim( $_SERVER["REQUEST_URI"] , '/' )

이것은 「덤」솔루션이라는 점에 주의해 주세요.예를 들어, 민달팽이 'coming-soon'이 있는 페이지도 모른다.p=6또한 permalink 설정이 다음과 같이 설정되어 있는 것을 전제로 하고 있습니다.pagename(어쨌든 그래야지!)

그래도 시나리오가 통제된 경우 유용한 속임수가 될 수 있습니다.로그인이 되지 않은 방문자를 "coming soon" 페이지로 리다이렉트하고 싶은 상황에서 사용하고 있습니다.단, "coming soon" 페이지는 이 규칙에서 제외해야 합니다.

global $pagenow;
if (
        ! is_admin() &&
        'wp-login.php' != $pagenow &&
        'coming-soon' != trim( $_SERVER["REQUEST_URI"] , '/' ) &&
        ! is_user_logged_in()
){
   wp_safe_redirect( 'coming-soon' );
}

Roots 스타터 테마는 현재 페이지 제목을 얻을 수 있는 환상적인 기능을 가지고 있다고 생각합니다.매우 해킹이 용이하고 모든 베이스를 커버하며 쉽게 사용할 수 있습니다.wp_title갈고리를 채우다

/**
 * Page titles
 */
function roots_title() {
  if (is_home()) {
    if (get_option('page_for_posts', true)) {
      echo get_the_title(get_option('page_for_posts', true));
    } else {
      _e('Latest Posts', 'roots');
    }
  } elseif (is_archive()) {
    $term = get_term_by('slug', get_query_var('term'), get_query_var('taxonomy'));
    if ($term) {
      echo $term->name;
    } elseif (is_post_type_archive()) {
      echo get_queried_object()->labels->name;
    } elseif (is_day()) {
      printf(__('Daily Archives: %s', 'roots'), get_the_date());
    } elseif (is_month()) {
      printf(__('Monthly Archives: %s', 'roots'), get_the_date('F Y'));
    } elseif (is_year()) {
      printf(__('Yearly Archives: %s', 'roots'), get_the_date('Y'));
    } elseif (is_author()) {
      $author = get_queried_object();
      printf(__('Author Archives: %s', 'roots'), $author->display_name);
    } else {
      single_cat_title();
    }
  } elseif (is_search()) {
    printf(__('Search Results for %s', 'roots'), get_search_query());
  } elseif (is_404()) {
    _e('Not Found', 'roots');
  } else {
    the_title();
  }
}

이것을 시험해 보세요.

$pagename = get_query_var('pagename');

나는 더 간단한 해결책을 생각해냈다.

반환된 페이지 이름 값을 wp_title()에서 가져옵니다.빈 경우 홈페이지 이름을 인쇄하고 그렇지 않으면 wp_title() 값을 에코합니다.

<?php $title = wp_title('', false); ?>

첫 번째 인수로 구분한 후 display를 false로 설정하여 변수에 대한 입력으로 사용하십시오.그리고 머리글 태그 사이에 코드를 끼워 넣으세요.

<?php if ( $title == "" ) : echo "Home"; else : echo $title; endif; ?>

그것은 나에게 효과가 있었고 당신이 추출하고 싶은 섹션에 첫 번째가 선언되도록 했다.$title다른 변수를 반환하도록 조정할 수 있습니다.

용도:

$title = get_the_title($post);
$parent_title = get_the_title($post->post_parent);

echo $title;
echo $parent_title;

이것이 가장 사용하기 쉬운 것 같습니다.

<?php single_post_title(); ?>

루프가 시작되기 전에 제목을 표시합니다.

$page_title = $wp_query->post->post_title;

페이지 ID 또는 slug가 아닌 실제 쿼리된 페이지를 찾는 경우 다음 옵션 중 하나는 쿼리를 가로채는 것입니다.

add_action('parse_request', 'show_query', 10, 1);

함수 내에서 $wp 오브젝트에 액세스 할 수 있으며 pagename 또는 post name 중 하나를 다음과 같이 얻을 수 있습니다.

function show_query($wp){
     if ( ! is_admin() ){ // heck we don't need the admin pages
         echo $wp->query_vars['pagename'];
         echo $wp->query_vars['name'];
     }
}

한편, 정말로 포스트 데이터를 필요로 하는 경우, 최초로 입수할 수 있는 장소(이 문맥상에서는 거의 틀림없이 최적)는 다음과 같습니다.

add_action('wp', 'show_page_name', 10, 1);

function show_page_name($wp){
     if ( ! is_admin() ){
        global $post;
        echo $post->ID, " : ", $post->post_name;
     }
}

마지막으로, 이것이 OP의 질문이 아니라는 것을 깨달았습니다만, Admin 페이지명을 찾으시는 경우는, 글로벌을 사용해 주세요.$pagenow.

워드프레스 루프 내:

if ( have_posts() ) : while ( have_posts() ) : the_post();
/******************************************/
echo get_the_title();
/******************************************/
endwhile; endif;

현재 페이지 제목이 표시됩니다.

참고: get_the_title()

내 버전은 다음과 같습니다.

$title = ucwords(str_replace('-', ' ', get_query_var('pagename')));

get_bar_var pagename')에서 페이지 슬러그를 주고 있었습니다.따라서 위는 모든 대시를 대체하고 각 단어의 첫 글자를 대문자로 표시하므로 실제로 제목으로 사용할 수 있습니다.

2018년 현재, 저는 다음과 같이 사용하고 있습니다.

<section id="top-<?=(is_front_page() ? 'home' : basename(get_permalink()));?>">

워드프레스 코덱에서 이 기능을 찾았습니다.

질문을 받다

입니다.$wp_query->get_queried_object

이 게시물은 저를 올바른 방향으로 이끌었지만, 이 업데이트가 필요한 것 같습니다.

이것은 functions.php 에 있는 경우에도 유효합니다.글로벌 어레이를 사용해야 하기 때문에 최적의 방법은 아니지만 동작합니다.

  1. 먼저 필터를 추가해야 합니다.template_include보다 사용하기 좋은 필터가 존재해야 하는데 모두 알 수는 없습니다.오른쪽을 가리켜 주세요.

    add_filter( 'template_include', 'var_template_include', 1000 );
    function var_template_include( $template ){
        global $wp_query;
        $GLOBALS['current_page'] = $wp_query->get_queried_object()->post_name;
        return $template;
    }
    
  2. 변수를 직접 사용하지 않음

    function get_current_page( $echo =  false ) {
        if( !isset( $GLOBALS['current_page'] ) )
            return false;
        return $GLOBALS['current_page'];
    }
    
  3. 이 기능을 할 수 .get_current_page()할 수 있습니다

언급URL : https://stackoverflow.com/questions/4837006/how-can-i-get-the-current-page-name-in-wordpress

반응형