it-swarm.com.ru

Wordpress Получить идентификатор страницы за пределами цикла

Я хочу получить идентификатор страницы перед началом цикла в Wordpress. я использую 

$page = get_query_var('page_id');

Видимо, ничего не возвращает.

Я просто хочу проверить страницу на предмет ее идентификатора и добавить класс в тег <body> на ее основе.

69
Atif Mohammed Ameenuddin

Если вы используете довольно постоянные ссылки, get_query_var('page_id') не будет работать.

Вместо этого получите запрашиваемый идентификатор объекта из глобального $wp_query:

// 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();
149
TheDeadMedic

Вы также можете создать универсальную функцию для получения идентификатора поста вне его или внутри цикла (обрабатывает оба случая):

<?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();
8
Nadeem Khan

Вместо этого используйте этот глобальный пост $:

global $post;
echo $post->ID;
6
ryscript

Если вы каким-либо образом искали эту тему из-за страницы поста (альтернатива индексной страницы при использовании статической главной страницы), то правильный ответ таков:

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

(взято из Forrst | Echo WordPress "Страница сообщений" title - Некоторый код из tammyhart )

4
banesto

Я сделал это следующим образом, и это отлично сработало для меня.

Сначала объявили глобальную переменную в header.php, назначив идентификатор сообщения или страницы перед его изменением, поскольку LOOP назначает ему идентификатор последней показанной записи:

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

И использовать в любом месте шаблона, например, в файле footer.php:

echo $GLOBALS['pageid];

0
Edd

Если вы находитесь на странице, и это не работает:

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

вы можете попытаться создать постоянную ссылку вручную с помощью PHP, чтобы вы могли найти идентификатор сообщения:

// 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);

Возможно, он не улавливает все возможные постоянные ссылки (тем более, что я убираю строку запроса), но вы можете изменить ее в соответствии со своим вариантом использования.

0
Jarrett Barnett

Используйте ниже две строки кода, чтобы получить текущую страницу или идентификатор сообщения 

global $post;
echo $post->ID;
0
Braj Kishor Sah

Вы можете использовать is_page($page_id) вне цикла для проверки.

0
nikc.org

Эта функция получает идентификатор текущей страницы.

get_the_ID();
0
jruzafa