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()
페이지 테마 파일을 구문 분석하기 전에 호출되므로 페이지의 템플리트 내부에서 언제든지 사용할 수 있습니다.
-
문서화 된 것으로 보이지는 않지만
$pagename
var은 영구 링크를 사용하는 경우에만 설정됩니다. 나는 이것을 사용하지 않으면 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();
}
}