WordPress的获取循环外的页面ID

我想在Wordpress中启动循环之前获取页面ID。 我在用

$page = get_query_var('page_id');

显然,它什么都没有返回。

我只是想检查一个页面的ID,并添加一个类到<body>标签的基础上。

如果你使用漂亮的固定链接, get_query_var('page_id')将不起作用。

相反, 从全局$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(); 

您也可以创build一个通用函数来获取post的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; 

如果你以任何方式search这个主题,因为post页面(使用静态首页时的索引页替代),那么正确的答案是这样的:

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

(来自Forrst |回声WordPress“post页面”标题 – 一些来自tammyhart的代码 )

你可以在循环外使用is_page($page_id)来检查。

这个函数得到当前页面的id。

 get_the_ID(); 

使用以下两行代码获取当前页面或postID

 global $post; echo $post->ID; 

如果你在一个页面上,这是行不通的:

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

您可以尝试使用PHP手动构build永久链接,以便查找postID:

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

它可能没有抓住每一个可能的永久链接(尤其是因为我剥离了查询string),但你可以修改它以适合你的用例。

这是正确的代码。

 echo $post->ID; 

如果你是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.... } 

请享用!