WordPress Получить идентификатор страницы вне цикла

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

$page = get_query_var('page_id');

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

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

Если вы используете довольно постоянные ссылки, 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(); 

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

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

Вместо этого используйте эту глобальную должность:

 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 «Posts Pages» title – некоторый код из tammyhart )

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

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

 get_the_ID(); 

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

 global $post; echo $post->ID; 

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

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

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

Это правильный код.

 echo $post->ID; 

Если вы не используете Loop WordPress, вы не можете использовать какой-либо метод wordpress, поэтому вы должны использовать чистую php.

Вы можете использовать этот код. И обязательно поможет вам 🙂

 $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.... } 

Наслаждайтесь!