Я хочу получить идентификатор страницы перед запуском цикла в 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();
get_queried_object_id();
верните 0 для меня. Я думаю, что проблема в том, что я звоню после специального запроса. Я хочу де фактический идентификатор страницы.
Вы также можете создать общую функцию для получения идентификатора сообщения, вне зависимости от того, находится ли он снаружи или внутри цикла (обрабатывает оба случая):
<?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();
get_the_ID
- это уже объявленная функция. я думаю, что вы хотели изменить имя функции, или это было частью класса?
Используйте эту глобальную $post вместо:
global $post;
echo $post->ID;
$post
инициализируется при запуске цикла.
Если вы каким-либо образом искали эту тему из-за страницы-сообщения (альтернативная страница страницы при использовании статической первой страницы), тогда правильный ответ таков:
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)
Если вы находитесь на странице, и это не работает:
$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);
Он может не улавливать все возможные постоянные ссылки (тем более, что я удаляю строку запроса), но вы можете изменить его в соответствии с вашим прецедентом.
Используйте ниже двух строк кода для получения текущей страницы или сообщения
global $post;
echo $post->ID;
Эта функция получает идентификатор от текущей страницы.
get_the_ID();
Вы можете использовать is_page($page_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....
}
Наслаждайтесь!
Это правильный код.
echo $post->ID;