programing tip

WordPress 루프 외부에서 페이지 ID 가져 오기

itbloger 2020. 10. 21. 07:45
반응형

WordPress 루프 외부에서 페이지 ID 가져 오기


WordPress에서 루프를 시작하기 전에 페이지 ID를 얻고 싶습니다. 나는 사용하고있다

$page = get_query_var('page_id');

분명히 아무것도 반환하지 않습니다.

페이지에서 ID를 확인하고 <body>이를 기반으로 태그에 클래스를 추가하고 싶습니다 .


예쁜 영구 링크를 사용하는 경우 get_query_var('page_id')작동하지 않습니다.

대신 global에서$wp_query 쿼리 된 개체 ID를 가져옵니다 .

// Since 3.1 - recommended!
$page_object = get_queried_object();
$page_id     = get_queried_object_id();


// "Dirty" pre 3.1
global $wp_query;

$page_object = $wp_query->get_queried_object();
$page_id     = $wp_query->get_queried_object_id();

루프의 외부 또는 내부에 관계없이 게시물의 ID를 가져 오는 일반 함수를 만들 수도 있습니다 (두 경우 모두 처리).

<?php

/**
 * @uses WP_Query
 * @uses get_queried_object()
 * @see get_the_ID()
 * @return int
 */
function get_the_post_id() {
  if (in_the_loop()) {
       $post_id = get_the_ID();
  } else {
       global $wp_query;
       $post_id = $wp_query->get_queried_object_id();
         }
  return $post_id;
} ?>

그리고 간단하게 :

$page_id = get_the_post_id();

대신이 전역 $ post를 사용하십시오.

global $post;
echo $post->ID;

게시물 페이지 (정적 프론트 페이지를 사용할 때 색인 페이지 대체) 때문에이 주제를 검색했다면 정답은 다음과 같습니다.

if (get_option('show_on_front') == 'page') {
    $page_id = get_option('page_for_posts');
    echo get_the_title($page_id);
}

( Forrst 에서 가져옴 | Echo WordPress "게시물 페이지"제목-tammyhart의 일부 코드 )


is_page($page_id)루프 외부 를 사용 하여 확인할 수 있습니다 .


이 함수는 현재 페이지에서 ID를 가져옵니다.

get_the_ID();

두 줄의 코드를 사용하여 현재 페이지 또는 게시물 ID를 가져옵니다.

global $post;
echo $post->ID;

페이지에 있는데 이것이 작동하지 않는 경우 :

$page_object = get_queried_object();
$page_id     = get_queried_object_id();

PHP를 사용하여 수동으로 permalink를 빌드하여 게시물 ID를 조회 할 수 있습니다.

// get or make permalink
$url = !empty(get_the_permalink()) ? get_the_permalink() : (isset($_SERVER['HTTPS']) ? "https" : "http") . "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
$permalink = strtok($url, '?');

// get post_id using url/permalink
$post_id = url_to_postid($url);

// want the post or postmeta? use get_post() or get_post_meta()
$post = get_post($post_id);
$postmeta = get_post_meta($post_id);

가능한 모든 영구 링크를 포착하지는 못하지만 (특히 쿼리 문자열을 제거했기 때문에) 사용 사례에 맞게 수정할 수 있습니다.


나는 다음과 같은 방식으로 그것을 해왔고 그것은 나를 위해 완벽하게 작동했습니다.

LOOP가 표시된 마지막 항목의 ID를 할당하기 때문에 먼저 header.php에서 전역 변수를 선언하여 변경하기 전에 게시물 또는 페이지의 ID를 할당합니다.

$GLOBALS['pageid] = $wp_query->get_queried_object_id();

템플릿의 어느 곳에서나 사용하려면 footer.php의 예 :

echo $GLOBALS['pageid];


This is the correct code.

echo $post->ID;

If you are out of the Loop of WordPress you can not use any of the method of wordpress so you must use pure php.

You can use this code. And sure will help you :)

$page_id = @$_GET['page_id'];

if (!is_numeric($page_id)) {
    // Then the uri must be in friendly format aka /my_domain/category/onepage/
    // Try this
    //$path = '/www/public_html/index.php/';
    ///$path = '/my_domain/category/onepage/';
    $path = $_SERVER['REQUEST_URI'];
    // Clean the uri
    //$path = str_replace('/', '', $page);
    $path = str_replace('.php', '', $path);
    //$path = str_replace('?s=', '', $path);
    $path = $path ? $path : 'default';

    $path_len = strlen($path);
    $last_char = substr($path, $path_len -1);
    //echo $last_char;
    $has_slash = strpos($last_char, "/");
    //echo $has_slash;
    if ($has_slash === 0) :
        $path = substr($path, 0, $path_len -1);
    elseif ($has_slash === null) :
        $path = substr($path, 0, $path_len);
    endif;
    //echo "path: ".$path; // '/www/public_html/index'
    $page = substr(strrchr($path, "/"), 1);
    echo "page: ".$page; // 'index'
}

$my_page_id = 31;
$my_page = 'mypage';

//echo "page: ".$page;
//echo "page_id ".$page_id;
if($page_id == $my_page_id || $page == $my_page) 
{
    // your stuff....
}

Enjoy!

참고URL : https://stackoverflow.com/questions/3127385/wordpress-get-the-page-id-outside-the-loop

반응형