[wordpress] WordPress에서 현재 페이지 이름을 어떻게 알 수 있습니까?

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

내가 지금까지 (본 모든 솔루션 the_title(), get_page()->post_name, get_post(), 등) 후 항목을 포함하는 페이지에 대한 작업을하지 않습니다. 그들은 모두 최신 블로그 항목의 이름을 반환합니다.

다른 방법으로 말하면, “My News”라는 이름으로 WordPress에 페이지가 생성되었다고 가정하십시오. 이 페이지는 “게시물 페이지”로 설정됩니다. 페이지에 몇 개의 게시물을 추가하십시오. 이제 최신 게시물 이름 대신 “my-news”문자열을 검색하기 위해 어떤 API를 사용할 수 있습니까?


작동하는 것처럼 보이는 다음 변수를 찾았습니다.

$wp_query->queried_object->post_name

이것은 실제로 페이지 이름 (슬러그)의 URL 친화적 인 버전이며, 내가 찾던 것입니다. 이것은 기본 템플릿 ( Twenty Ten ) 으로 테스트되었습니다 . 아래의 두 변수가 왜 내 사이트에서 작동하지 않는지 잘 모르겠습니다. 팁에 대한 keatchprint_r() 감사합니다 .

이제이 정보가 왜 그렇게 깊이 숨겨져 있습니까?



답변

WordPress 전역 변수 $pagename를 사용할 수 있어야합니다. 방금 지정한 것과 동일한 설정으로 시도했습니다.

$pagename는 함수 내에서 wp-includes / theme.php 파일에 정의되어 있으며 get_page_template()페이지 테마 파일을 구문 분석하기 전에 호출되므로 페이지의 템플리트 내부에서 언제든지 사용할 수 있습니다.

  • 문서화 된 것으로 보이지는 않지만 $pagenamevar은 영구 링크를 사용하는 경우에만 설정됩니다. 나는 이것을 사용하지 않으면 WordPress에 페이지 슬러그가 필요하지 않으므로 설정하지 않기 때문입니다.

  • $pagename 페이지를 정적 프론트 페이지로 사용하는 경우에는 설정되지 않습니다.

    • 이것은 /wp-includes/theme.php의 코드이며, $pagename설정할 수 없을 때 지적한 솔루션을 사용합니다 .

      $ pagename = get_query_var ( ‘pagename’); if (! $ pagename && $ id> 0) {// 정적 페이지가 첫 페이지로 설정되면 $ pagename이 설정되지 않습니다. 조회 된 오브젝트에서 검색하십시오. $ post = $ wp_query-> get_queried_object (); $ pagename = $ post-> post_name; }


답변

페이지의 슬러그 이름을 얻는 나의 접근 방식 :

$slug = basename(get_permalink());


답변

루프 전에 페이지 제목을 가져와야합니다 .

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

참조를 확인하십시오 : http://codex.wordpress.org/Function_Reference/WP_Query#Properties .

print_r($wp_query)

루프 전에 $wp_query객체 의 모든 값을 봅니다 .


답변

<?php wp_title(''); ?>

이것은 나를 위해 일했습니다.

올바르게 이해하면 게시물 항목이있는 페이지에서 페이지 이름을 가져 오려고합니다.


답변

전역 변수를 사용하여 현재 페이지, 게시물 또는 사용자 정의 게시물 유형을 얻을 수 있습니다 $post.

echo $post->post_title

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

페이지에 루프가있는 경우 각 루프를 끝내고 wp_reset_postdata();설정하십시오.$post 표시되는 기본 항목 (페이지)으로 다시 .

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


답변

당신이 당신의 functions.php 파일 내에서 현재 페이지에 액세스하기 위해 찾고 있다면 (그래서, 전에 루프 전에 $post전에 채워집니다 $wp_query정말 선택의 여지가 있지만, 서버 변수 자체에 액세스 할 수 … 등, 초기화) 및 쿼리 문자열에서 요청 된 페이지를 추출하십시오.

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

이 솔루션은 “멍청한”솔루션입니다. 예를 들어 슬러그 ‘coming-soon’이있는 페이지도 p=6입니다. 그리고 permalink 설정이로 설정되어 있다고 가정합니다.pagename (어쨌든 있어야합니다!)로 .

그러나 통제 된 시나리오가있는 경우 유용한 작은 방법이 될 수 있습니다. 로그인하지 않은 방문자를 “출시 예정”페이지로 리디렉션하려는 상황에서이를 사용하고 있습니다. 그러나 나는 그것들을 두려운 “리디렉션 루프”에 넣지 않도록해야하므로이 규칙에서 “출시 예정”페이지를 제외시켜야합니다.

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 starter 테마 에는 현재 페이지 제목을 얻는 환상적인 기능이 있다고 생각합니다 . 그것은 매우 해킹 가능하고 모든베이스를 다루며 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();
  }
}