Я хочу получить идентификатор страницы перед запуском цикла в 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.... }
Наслаждайтесь!