【发布时间】:2011-03-08 19:54:31
【问题描述】:
我想在 WordPress 中开始循环之前获取页面 ID。我正在使用
$page = get_query_var('page_id');
显然,它什么也不返回。
我只是想检查一个页面的 ID 并基于它向<body> 标签添加一个类。
【问题讨论】:
我想在 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();
【讨论】:
get_queried_object_id(); 为我返回 0。我认为问题在于我在自定义查询之后调用它。我想要实际的页面 ID。
get_queried_object(); 对我不起作用,但$wp_query->get_queried_object(); 对...我看了一下get_queried_object();,它和后者一样。
$wp_query?
您还可以创建一个通用函数来获取帖子的 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;
【讨论】:
$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 Page" title - Some code from tammyhart)
【讨论】:
如果您在一个页面上并且这不起作用:
$page_object = get_queried_object();
$page_id = get_queried_object_id();
您可以尝试使用 PHP 手动构建永久链接,以便查找帖子 ID:
// 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);
它可能无法捕获所有可能的永久链接(尤其是因为我删除了查询字符串),但您可以对其进行修改以适合您的用例。
【讨论】:
您可以在循环外使用is_page($page_id) 进行检查。
【讨论】:
此函数从当前页面获取 id。
get_the_ID();
【讨论】:
$GLOBALS['post'],它可能在某个时候被填充,但不能保证除非/直到你在循环中。
使用下面两行代码获取当前页面或帖子ID
global $post;
echo $post->ID;
【讨论】:
我已经通过以下方式完成了它,它对我来说非常有效。
首先在 header.php 中声明一个全局变量,在它更改之前分配帖子或页面的 ID,因为 LOOP 为其分配了显示的最后一个条目的 ID:
$GLOBALS['pageid] = $wp_query->get_queried_object_id();
并在模板中的任何地方使用,例如在footer.php中:
echo $GLOBALS['pageid];
【讨论】:
这是正确的代码。
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....
}
享受吧!
【讨论】:
$post->ID 中已经存在的变量。即使您不在循环中,也可以使用很多很多 Wordpress 功能。不是必须在循环中使用的少数几个。